SQL - Sentencia con CASE
Comunidad de ProgramadoresIniciar sesiónCorreo: Contraseña: Entrar Recordar sesión en este navegadorRecordar contraseña?Iniciar sesiónCrear cuentaDocumentación y RecursosCursos y ManualesBiblioteca de TemasCódigo FuenteNoticias/ArtículosPDFs de programación Nuevo!! Foros y ConsultasForos de ConsultaChats de prog.Tablón de NotasDiccionario informáticoProgramadoresProgramadoresOfertas de TrabajoLista de CorreoProgramasProgramas/UtilidadesNuestros ProgramasIconos y CursoresPreguntas/RespuestasOtrosUtilidadesColaboradoresEncuestas/EstadísticasContactarLWP » Foros » SQL » Sentencia con CASE
VolverNuevo Tema<<>> Vista: arbolcronológicoSentencia con CASEAlvaro (04/07/2008 10:47:50)3.966 visitas1 respuestaRE:Sentencia con CASEpacopaz (04/07/2008 17:11:01)
Sentencia con CASEPublicado por Alvaro (11 intervenciones) el 04/07/2008 10:47:50Hola 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
Mens 102, Nivel 15, Estado 1, Procedimiento V_OPERINMO, Línea 2
Sintaxis incorrecta cerca de 'T_OPERINMO'.
Mens. 102, Nivel 15, Estado 1, Línea 1
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 pregunta0Responder
RE:Sentencia con CASEPublicado por pacopaz (143 intervenciones) el 04/07/2008 17:11:01El comando 'case' tiene la siguiente sintaxis:
case [expresion]
when [valor] then [resultado]
{when [valor] then [resultado]
else [resultado]}
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
Borrado en cascadatriggers