Problema con cadena
Publicado por Carlos Restrepo (61 intervenciones) el 22/05/2007 21:18:35
Hola a todos
una pregunta, como puedo hacer para que ejecutando un solo select pueda sacar los datos de una tabla dependiendo de una condicion especifica.
El caso es el siguiente, si se cumple que la variable @v_LPAYONDEL es mayor a cero, en el where de la consulta debo de buscar por un campo, pero si es la variable es menor op igual a cero debo buscar por otro.
Trata de hacerlo metiendo todo en una cadena de texto y utilizando el exec, pero no me funciona, parece ser que la cadena es demasiad larga.
De todas formas quisiera saber como puedo hacer esto sin tener que hacer un if que me obligaria a tener 2 consultas, quiero evitar tanto codigo, espero haberme hecho entender
Adjunto el codigo
IF @V_LPAYONDEL>0
BEGIN
SET @V_STRWHERE='where CCARID='+''''+@PI_CCARRIER+''''+' and ctrnsta <> ''04'' and DDELDATE>='+''''+convert(varchar(20),@V_DCLOSEDBAL,101)+''''+' and DDELDATE<=getdate()+1 AND mtreme01.csercode=SMSVCS00.csercode '
END
ELSE
BEGIN
SET @V_STRWHERE='where CCARID='+''''+@PI_CCARRIER+''''+' and ctrnsta <> ''04'' and DCARDATE>='+''''+convert(varchar(20),@V_DCLOSEDBAL,101)+''''+' and DCARDATE<=getdate()+1 AND mtreme01.csercode=SMSVCS00.csercode '
END
EXEC ('UPDATE ACTRNSERAP_SQL SET CCARRIER=GRAL.CCARID,DTRNDATE=GRAL.DTRNDATE,CSERVICE=GRAL.CSERCODE, CSERNAME=GRAL.CSERNAME,YTRNTOT=GRAL.ycarbal, CREC_INI=GRAL.lcRINITIAL,CREC_LAS=GRAL.lcRFINAL FROM ACTRNSERAP_SQL AP INNER JOIN(SELECT SUM(yusaamt+ycarcomm) AS ycarbal,MIN(CCARCONS) AS lcRINITIAL,MAX(CCARCONS) AS lcRFINAL,CCARID,DTRNDATE,SMSVCS00.csercode,SMSVCS00.CSERNAME FROM MTREME01, SMSVCS00 '+''''+@V_STRWHERE+''''+'GROUP BY CCARID,DTRNDATE,SMSVCS00.CSERCODE,SMSVCS00.CSERNAME)GRAL ON AP.CCARRIER=GRAL.CCARID AND AP.DTRNDATE=GRAL.DTRNDATE');
una pregunta, como puedo hacer para que ejecutando un solo select pueda sacar los datos de una tabla dependiendo de una condicion especifica.
El caso es el siguiente, si se cumple que la variable @v_LPAYONDEL es mayor a cero, en el where de la consulta debo de buscar por un campo, pero si es la variable es menor op igual a cero debo buscar por otro.
Trata de hacerlo metiendo todo en una cadena de texto y utilizando el exec, pero no me funciona, parece ser que la cadena es demasiad larga.
De todas formas quisiera saber como puedo hacer esto sin tener que hacer un if que me obligaria a tener 2 consultas, quiero evitar tanto codigo, espero haberme hecho entender
Adjunto el codigo
IF @V_LPAYONDEL>0
BEGIN
SET @V_STRWHERE='where CCARID='+''''+@PI_CCARRIER+''''+' and ctrnsta <> ''04'' and DDELDATE>='+''''+convert(varchar(20),@V_DCLOSEDBAL,101)+''''+' and DDELDATE<=getdate()+1 AND mtreme01.csercode=SMSVCS00.csercode '
END
ELSE
BEGIN
SET @V_STRWHERE='where CCARID='+''''+@PI_CCARRIER+''''+' and ctrnsta <> ''04'' and DCARDATE>='+''''+convert(varchar(20),@V_DCLOSEDBAL,101)+''''+' and DCARDATE<=getdate()+1 AND mtreme01.csercode=SMSVCS00.csercode '
END
EXEC ('UPDATE ACTRNSERAP_SQL SET CCARRIER=GRAL.CCARID,DTRNDATE=GRAL.DTRNDATE,CSERVICE=GRAL.CSERCODE, CSERNAME=GRAL.CSERNAME,YTRNTOT=GRAL.ycarbal, CREC_INI=GRAL.lcRINITIAL,CREC_LAS=GRAL.lcRFINAL FROM ACTRNSERAP_SQL AP INNER JOIN(SELECT SUM(yusaamt+ycarcomm) AS ycarbal,MIN(CCARCONS) AS lcRINITIAL,MAX(CCARCONS) AS lcRFINAL,CCARID,DTRNDATE,SMSVCS00.csercode,SMSVCS00.CSERNAME FROM MTREME01, SMSVCS00 '+''''+@V_STRWHERE+''''+'GROUP BY CCARID,DTRNDATE,SMSVCS00.CSERCODE,SMSVCS00.CSERNAME)GRAL ON AP.CCARRIER=GRAL.CCARID AND AP.DTRNDATE=GRAL.DTRNDATE');
Valora esta pregunta


0