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

   
Vista:

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

Restar valores de una suma con condición

Publicado por Isaias (3181 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

Restar valores de una suma con condición

Publicado por Juan Manuel Cruz Torres juanmcruz@hotmail.com (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

Restar valores de una suma con condición

Publicado por Isaias (3181 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