SQL Server - Restar valores de una suma con condición

 
Vista:
sin imagen de perfil

Restar valores de una suma con condición

Publicado por CarlosQ (52 intervenciones) el 16/01/2013 13:18:54
Hola maestros buenos días,

necesito su orientación y ayuda por favor, trato de restar dos valores que me entrega la siguiente query y como resultado arroja valores negativos e inmensos,

SELECT 'Stock' as item,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '01' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '01' THEN 1 END)) AS Ene,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '02' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '02' THEN 1 END)) AS Feb,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '03' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '03' THEN 1 END)) AS Mar,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '04' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '04' THEN 1 END)) AS Abr,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '05' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '05' THEN 1 END)) AS May,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '06' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '06' THEN 1 END)) AS Jun,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '07' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '07' THEN 1 END)) AS Jul,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '08' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '08' THEN 1 END)) AS Ago,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '09' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '09' THEN 1 END)) AS Sep,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '10' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '10' THEN 1 END)) AS Oct,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '11' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '11' THEN 1 END)) AS Nov,
convert(int,SUM(CASE WHEN left(right(a.fecha,7),2) = '12' THEN 1 END))- convert(int,SUM(CASE WHEN left(RIGHT(b.fecha_desp_o,7),2) = '12' THEN 1 END)) AS Dic
,CONVERT(Varchar(10),getdate(),103) Fecha_Carga
FROM DESPACHOS_HIST a, F_BD b

para enero el valor del primer SUM CASE da 760 y el segundo 120 por lo tanto la resta me debería dar para enero 640 y lo que me esta arrojando es este valor -2307600. Utilizo sql server 2005. Tambien probe con CAST y da igual.

saludos y gracias,
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

Restar valores de una suma con condición

Publicado por Isaias (4558 intervenciones) el 16/01/2013 18:43:02
Ignoro porque estas usando LEFT, RIGHT y CONVERT, si solo estas haciendo una simple resta de un mes de ENERO contra otro mes de ENERO de otra fecha.

Deberia verse asi:

sum((CASE WHEN DATEPART(mm, fecha) = 1 then 1 end) - (case when datepart(mm,fecha_desp) = 1 then 1 end)) as Ene,
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
sin imagen de perfil

Restar valores de una suma con condición

Publicado por Juan Manuel Cruz Torres (59 intervenciones) el 17/01/2013 17:25:29
¿Si no pones una sección ELSE dentro del CASE... qué valor aportaría?
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

Restar valores de una suma con condición

Publicado por Isaias (4558 intervenciones) el 18/01/2013 22:19:14
Juan

Te regres un NULL, pero en este caso, estamos seguros que regresara parte de la fecha, extrayendo solo el MES.
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