SQL Server - SQL elegir entre dos campos

 
Vista:
Imágen de perfil de Eduardo Flores

SQL elegir entre dos campos

Publicado por Eduardo Flores (2 intervenciones) el 11/03/2016 19:07:59
Saludos expertos:

Tengo la siguiente tabla COBROS_ABO donde registro los pagos realizados por los clientes estos son los campos:

ll_numero,ll_pgotipo,ll_pgofech,ll_pgodife,ll_pgomonto

Ahora el objetivo del reporte es mostrar los pagos efectuados por los clientes por semanas, esta es mi query básica:

1
2
3
4
5
select DATEPART( wk , LL_PGOFECH ),SUM(LL_PGOMONT)
from cobros_abo
where left(ll_pgofech,4) = '2015'
group by DATEPART( wk , LL_PGOFECH )
order by DATEPART( wk , LL_PGOFECH )

El campo ll_pgofech almacena la fecha en que se realizó el pago y el campo LL_PGODIFE se usa solo cuando el pago se realizo con un CHEQUE DIFERIDO y en este campo se almacena la fecha en que podrá ser cobrado el cheque. Por tanto ll_pgodife siempre será mayor a ll_pgofech.

Necesito que la query use el campo LL_PGODIFE en lugar de LL_PGOFECH cuando LL_PGODIFE sea mayor a SPACE(8).

Agradeciendo de antemano su gentil atención les deseo a todos un excelente dia.
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

SQL elegir entre dos campos

Publicado por Isaias (4558 intervenciones) el 11/03/2016 19:41:46
Lo que buscas es un WHERE condicional o dinamico, si buscas en Bing o Google, encontraras ejemplos como este:

1
2
3
4
5
6
7
8
9
SELECT * FROM #Result
WHERE 1 = (CASE
            WHEN @IdType='Student' AND StudentId = @Id
                  THEN 1
            WHEN @IdType='Teacher' AND TeacherId = @Id
                  THEN 1
            WHEN @IdType='Group' AND GroupId = @Id
                  THEN 1
            ELSE 0 END)

Trata de adaptarlo a tus necesidades

Otra opción, un query dinamico, solo que ahí, no se utilizan los índices.

Un comentario, en cuanto al manejo de las fechas que estas haciendo, aunque funciona, sin duda, tu left(ll_pgofech,4) = '2015', es mejor utilizar DATEPART(YY, ll_pgofech) = 2015
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
Imágen de perfil de Eduardo Flores

SQL elegir entre dos campos

Publicado por Eduardo Flores (2 intervenciones) el 11/03/2016 22:51:46
Saludos expertos,

Mil gracias Isaias por tu sugerencia. Esta es la solución:

1
2
3
4
5
select DATEPART( wk , CASE WHEN LL_PGODIFE > SPACE(8) THEN LL_PGODIFE ELSE LL_PGOFECH END ) as semapago,SUM(LL_PGOMONT)
from cobros_abo
where DATEPART( yy , ll_pgofech ) = 2015
group by DATEPART( wk , CASE WHEN LL_PGODIFE > SPACE(8) THEN LL_PGODIFE ELSE LL_PGOFECH END )
order by semapago

Saludos cordiales.
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
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

SQL elegir entre dos campos

Publicado por Isaias (4558 intervenciones) el 11/03/2016 23:31:14
Gracias por venir a compartir tu solución, puede servirles a otros. Salu2
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