Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Sumar valores en base a otra columna

Estas en el tema de Sumar valores en base a otra columna en el foro de SQL Server en Foros del Web. Hola cómo están? A continuación un ejemplo de lo que deseo realizar. Tengo la siguiente tabla t1: Categoría Marca SKU Volumen Vinagre Bonna 0,5 25 ...
  #1 (permalink)  
Antiguo 13/11/2011, 19:55
 
Fecha de Ingreso: octubre-2011
Mensajes: 4
Antigüedad: 12 años, 5 meses
Puntos: 0
Sumar valores en base a otra columna

Hola cómo están? A continuación un ejemplo de lo que deseo realizar. Tengo la siguiente tabla t1:


Categoría Marca SKU Volumen
Vinagre Bonna 0,5 25
Vinagre Bonna 1 32
Vinagre Casa 0,5 47
Vinagre Casa 1 12
Vinagre Casa 2 18
Vinagre Mazeite 0,75 31
Vinagre Mazeite 1 44
Vinagre Mazeite 2 20
Vinagre Vatel 1 60
Vinagre Vatel 2 10

Y me gustaría sumar los volúmenes en base al SKU, de tal modo que quede la siguiente tabla t2:

Categoría Marca SKU Volumen
Vinagre Bonna 0,5 72
Vinagre Bonna 1 148
Vinagre Casa 0,5 72
Vinagre Casa 1 148
Vinagre Casa 2 48
Vinagre Mazeite 0,75 31
Vinagre Mazeite 1 148
Vinagre Mazeite 2 48
Vinagre Vatel 1 148
Vinagre Vatel 2 48

En t2 deseo que el campo volumen tenga como valor la suma de todos los SKU iguales. En el caso anterior, sumamos todos los SKU 0,5 (25+47) lo cual resulta en 72, que será el nuevo valor para todos los SKU 0,5. Se aplica lo mismo para todos los SKU, por ejemplo, SKU = 1 sumamos 32+12+44+60 lo que da 148, que será el valor para todos los SKU = 1.

Mi problema radica en que no sé qué herramienta utilizar, he probado con having, case y group by pero quiero mantener la misma cantidad de filas, no que se unan los valores, alguien sabrá como resolver este problema?

Muchas gracias de antemano.

PD: Puse las columnas con colores intercalados para evitar confusiones.
  #2 (permalink)  
Antiguo 14/11/2011, 09:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Sumar valores en base a otra columna

Código SQL:
Ver original
  1. CREATE TABLE #temp(
  2. categoria VARCHAR(20),
  3. marca VARCHAR(10),
  4. sku VARCHAR(5),
  5. volumen INT
  6. )
  7.  
  8.  
  9. INSERT INTO #temp VALUES ('Vinagre', 'Bonna', '0,5', 25)
  10. INSERT INTO #temp VALUES ('Vinagre', 'Bonna', '1', 32)
  11. INSERT INTO #temp VALUES ('Vinagre', 'Casa', '0,5', 47)
  12. INSERT INTO #temp VALUES ('Vinagre', 'Casa', '1', 12)
  13. INSERT INTO #temp VALUES ('Vinagre', 'Casa', '2', 18)
  14. INSERT INTO #temp VALUES ('Vinagre', 'Mazeite', '0,75', 31)
  15. INSERT INTO #temp VALUES ('Vinagre', 'Mazeite', '1', 44)
  16. INSERT INTO #temp VALUES ('Vinagre', 'Mazeite', '2', 20)
  17. INSERT INTO #temp VALUES ('Vinagre', 'Vatel','1', 60)
  18. INSERT INTO #temp VALUES ('Vinagre', 'Vatel','2', 10)
  19.  
  20. SELECT SUM(volumen) AS suma, sku INTO #temp2 FROM #temp GROUP BY sku
  21.  
  22. UPDATE #temp
  23. SET volumen=t1.suma
  24. FROM
  25. (
  26. SELECT suma, sku FROM #temp2
  27. ) AS t1 WHERE #temp.sku=t1.sku
  28.  
  29. SELECT * FROM #temp

Resultado:


categoria marca sku volumen
Vinagre Bonna 0,5 72
Vinagre Bonna 1 148
Vinagre Casa 0,5 72
Vinagre Casa 1 148
Vinagre Casa 2 48
Vinagre Mazeite 0,75 31
Vinagre Mazeite 1 148
Vinagre Mazeite 2 48
Vinagre Vatel 1 148
Vinagre Vatel 2 48


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: columna, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:40.