SQL - Sentencia con CASE

 
Vista:

Sentencia con CASE

Publicado por Alvaro (11 intervenciones) el 04/07/2008 10:47:50
Hola muy buenas tengo el siguiente problema, tenia una base de datos en acces y la he migrado a sql server 2005, pero ahora algunas consultas que hacia en la base de datos acces no me funcionan en la sql server 2005, por ejemplo una consulta en la que utilizo el "iif" en el access me funciona bien pero en el sql no. Me he informado y me he enterado que el sql no reconoce el comando "iif" por lo que tendria que hacerlo con el comando "CASE". Lo he intentado y me aparecen los siguientes errores y no soy capaz de solucionarlo:

Estos errores me aparecen cuando ejecuto la sentencia con el iif.

Mens 102, Nivel 15, Estado 1, Procedimiento V_OPERINMO, Línea 1
Sintaxis incorrecta cerca de '='.
Mens 102, Nivel 15, Estado 1, Procedimiento V_OPERINMO, Línea 2
Sintaxis incorrecta cerca de 'T_OPERINMO'.

Estos errores me aparecen cuando ejecuto la sentencia con el iif.

Mens. 102, Nivel 15, Estado 1, Línea 1
Sintaxis incorrecta cerca de ','.
Mens. 102, Nivel 15, Estado 1, Línea 1
Sintaxis incorrecta cerca de 'T_OPERINMO'.

A continuacion os detallo la sentencia que tengo con el "iif" y como la he hecho yo con el "CASE" para ver si ustedes identifican el error porque yo no tengo coj......... de solucionarlo:

Sentencia con "IIF":

SELECT T_OPERINMO.*, V_INMO.num_referencia, V_INMO.cod_tipo, V_INMO.TipoInmo, V_INMO.cod_operacion AS cod_operinmo, V_INMO.TipoOper, V_INMO.Estado, V_INMO.cod_cliente AS Prop_Actual, T_CLIENTE.Nombre+' '+T_CLIENTE.Apellidos AS Propietario, V_DEMANDA.cod_cliente, V_DEMANDA.Nombre+' '+V_DEMANDA.Apellidos AS Cliente, V_INMO.TipoDir, V_INMO.direccion, V_INMO.cod_situacion, V_DEMANDA.Telf_Movil, V_INMO.cod_captacion, IIf(cod_tipocomision=0,T_OPERINMO.val_porcen*T_OPERINMO.precio_operacion/100,T_OPERINMO.val_porcen) AS Comision_Propietario, IIf(dem_tipocom='P',T_OPERINMO.dem_valor*T_OPERINMO.precio_operacion/100,T_OPERINMO.dem_valor) AS Comision_Demandante, IIf(ban_tipocom='P', T_OPERINMO.ban_valor*T_OPERINMO.val_financiado/100,T_OPERINMO.ban_valor) AS Comision_Banco, IIf(cli_tipocom='P',T_OPERINMO.cli_valor*T_OPERINMO.val_financiado/100, T_OPERINMO.cli_valor) AS Comision_Cliente, T_CLIENTE.Telf_Domicilio, T_CLIENTE.Telf_Trabajo, T_CLIENTE.Telf_Movil AS Movil_Prop, T_CLIENTE.Segundo A
S Segundo_Prop, T_CLIENTE.NIF_Seg, T_CLIENTE.Razon_Social, T_CLIENTE.CIF, V_INMO.Calificacion, V_INMO.refcatastral, T_CLIENTE.NIF, T_CLIENTE.Cod_postal AS cod_postal_prop, V_INMO.num_referencia AS nro_referencia, V_TIPOOPER.Descripcion AS Tipo_Operacion FROM (((T_OPERINMO LEFT JOIN V_INMO ON (T_OPERINMO.cod_inmueble = V_INMO.cod_inmueble) AND (T_OPERINMO.cod_sucinmo = V_INMO.cod_sucursal)) LEFT JOIN V_DEMANDA ON (T_OPERINMO.cod_demanda = V_DEMANDA.cod_demanda) AND (T_OPERINMO.cod_sucdem = V_DEMANDA.cod_sucursal)) LEFT JOIN T_CLIENTE ON (T_OPERINMO.cod_sucprop = T_CLIENTE.Cod_Sucursal) AND (T_OPERINMO.cod_propietario = T_CLIENTE.Cod_Cliente)) LEFT JOIN V_TIPOOPER ON (T_OPERINMO.operacion_inmo = V_TIPOOPER.CodTipo) AND (T_OPERINMO.cod_sucursal = V_TIPOOPER.Cod_Sucursal)

Sentencia con "CASE":

SELECT T_OPERINMO.*, V_INMO.num_referencia, V_INMO.cod_tipo, V_INMO.TipoInmo, V_INMO.cod_operacion AS cod_operinmo, V_INMO.TipoOper, V_INMO.Estado, V_INMO.cod_cliente AS Prop_Actual, T_CLIENTE.Nombre+' '+T_CLIENTE.Apellidos AS Propietario, V_DEMANDA.cod_cliente, V_DEMANDA.Nombre+' '+V_DEMANDA.Apellidos AS Cliente, V_INMO.TipoDir, V_INMO.direccion, V_INMO.cod_situacion, V_DEMANDA.Telf_Movil, V_INMO.cod_captacion, case cod_tipocomision when 0,T_OPERINMO.val_porcen*T_OPERINMO.precio_operacion/100,T_OPERINMO.val_porcen end as Comision_Propietario, case dem_tipocom when 'P',T_OPERINMO.dem_valor*T_OPERINMO.precio_operacion/100,T_OPERINMO.dem_valor end AS Comision_Demandante, case ban_tipocom when'P', T_OPERINMO.ban_valor*T_OPERINMO.val_financiado/100,T_OPERINMO.ban_valor end AS Comision_Banco, case cli_tipocom when 'P',T_OPERINMO.cli_valor*T_OPERINMO.val_financiado/100, T_OPERINMO.cli_valor end AS Comision_Cliente, T_CLIENTE.Telf_Domicilio, T_CLIENTE.Telf_Trabajo, T_CLIENTE.Telf_Movil AS Movil_Prop, T_CLIENTE.Segundo AS Segundo_Prop, T_CLIENTE.NIF_Seg, T_CLIENTE.Razon_Social, T_CLIENTE.CIF, V_INMO.Calificacion, V_INMO.refcatastral, T_CLIENTE.NIF, T_CLIENTE.Cod_postal AS cod_postal_prop, V_INMO.num_referencia AS nro_referencia, V_TIPOOPER.Descripcion AS Tipo_Operacion FROM (((T_OPERINMO LEFT JOIN V_INMO ON (T_OPERINMO.cod_inmueble = V_INMO.cod_inmueble) AND (T_OPERINMO.cod_sucinmo = V_INMO.cod_sucursal)) LEFT JOIN V_DEMANDA ON (T_OPERINMO.cod_demanda = V_DEMANDA.cod_demanda) AND (T_OPERINMO.cod_sucdem = V_DEMANDA.cod_sucursal)) LEFT JOIN T_CLIENTE ON (T_OPERINMO.cod_sucprop = T_CLIENTE.Cod_Sucursal) AND (T_OPERINMO.cod_propietario = T_CLIENTE.Cod_Cliente)) LEFT JOIN V_TIPOOPER ON (T_OPERINMO.operacion_inmo = V_TIPOOPER.CodTipo) AND (T_OPERINMO.cod_sucursal = V_TIPOOPER.Cod_Sucursal)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sentencia con CASE

Publicado por pacopaz (143 intervenciones) el 04/07/2008 17:11:01
El comando 'case' tiene la siguiente sintaxis:

case [expresion]
when [valor] then [resultado]
{when [valor] then [resultado]
...
else [resultado]}
end

Se parece más a un select case, en vb.
Si necesitas más información, refiérete a esta página:
http://msdn.microsoft.com/es-es/library/ms173318.aspx

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar