SQL - Duda sobre consultas con sum()

 
Vista:

Duda sobre consultas con sum()

Publicado por Milpin (9 intervenciones) el 14/12/2006 20:00:15
Saludos compañeros, necesito un poco de ayuda porfavor, espero me puedan ayudar, lo que tengo es lo siguiente, tengo que insertar en una tabla temporal la suma de unos cuantos valores y despues tengo que hacer un select de esa tabla pero que solo me traiga los que en todos sus campos sean diferentes a 0, es decir que si tengo 5 campos y en los 5 hay 0 que ese no me lo traiga. aqui esta el ejemplo con codigo

insert into #tmp
select concepto,
sum(suma1) as total1,
sum(suma2) as total2,
sum(suma3) as total3,
sum(suma4) as total4,
sum(suma5) as total5
from tablaX

despues tengo que hacer la consulta de todos los que en todos sus campos sean diferentes de 0 pero son como 100 campos, de que forma puedo hacerle para la consulta pero que sea eficiente??
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
sin imagen de perfil

RE:Duda sobre consultas con sum()

Publicado por Liliana (426 intervenciones) el 15/12/2006 13:06:16
Hola,
Te mando este ejemplo basado en una respuesta que guardé de un foro, espero que te sirva para orientarte.

-- Tu tabla de datos
CREATE TABLE TuTabla
(Id smallint,
col1 smallint,
col2 smallint,
col3 smallint,
col4 smallint,
col5 smallint)

INSERT TuTabla
SELECT 1, 11, 21, 31, 41, 51 UNION
SELECT 2, 12, 22, 32, 42, 52 UNION
SELECT 3, 13, 23, 33, 43, 53 UNION
SELECT 4, 14, 24, 34, 44, 54 UNION
SELECT 5, 15, 25, 35, 45, 55

-- Tabla de salida
CREATE TABLE Test
(Id smallint,
col smallint)

-- Proceso
DECLARE @table varchar(100), @col varchar(100)
SELECT @table = 'TuTabla'

DECLARE @pos smallint, @max smallint
SELECT @pos = 2 -- skip the Id
SELECT @max = (SELECT MAX(ORDINAL_POSITION)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table)

WHILE @pos <= @max
BEGIN
SELECT @col = (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @table AND ORDINAL_POSITION = @pos)
INSERT Test
EXEC ('SELECT Id, ' + @col + ' FROM ' + @table )
SELECT @pos = @pos + 1
END

SELECT Id, SUM (Col) FROM Test
GROUP BY Id
HAVING SUM (Col) < 170
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