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

Agrupar y sumar que quede en una linea

Estas en el tema de Agrupar y sumar que quede en una linea en el foro de SQL Server en Foros del Web. Hola tengo el siguiente Query que me da estos resultados: Vendedor Zona Cantidad Vendidos Anulados Perdidos Vendedor X Valencia 30 25 5 Vendedor X Valencia ...
  #1 (permalink)  
Antiguo 04/08/2011, 13:46
 
Fecha de Ingreso: agosto-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
Sonrisa Agrupar y sumar que quede en una linea

Hola tengo el siguiente Query que me da estos resultados:

Vendedor Zona Cantidad Vendidos Anulados Perdidos
Vendedor X Valencia 30 25 5
Vendedor X Valencia 10 4 6
Vendedor Y Maracay 50 40 10
Vendedor Y Maracay 20 15 5

Lo que se requiere es lo siguiente que me sume la cantidad y que todo me quede en una linea

Vendedor X Valencia 40 29 5 6
Vendedor Y Maracay 70 55 5 10

Porfa espero me puedan Ayudar.... Gracias...
  #2 (permalink)  
Antiguo 04/08/2011, 14:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Agrupar y sumar que quede en una linea

Prueba con algo asi:

select vendedor,zona, sum(cantidad), sum(vendidos) from
tabla group by vendedor, zona



Me queda una duda en los ultimos registros que aparecen en tu resultado

Vendedor X Valencia 40 29 5 6
Vendedor Y Maracay 70 55 5 10

esos que son??

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 04/08/2011, 15:09
 
Fecha de Ingreso: agosto-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Agrupar y sumar que quede en una linea

HOLA GRACIAS POR RESPONDER TE ENVIO LO QUE TENGO:

SELECT DISTINCT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados],
CASE WHEN U_Status = 'A' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Aprobados',
CASE WHEN U_Status = 'N' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Anulados',
CASE WHEN U_Status = 'P' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Perdidos',
CASE WHEN U_Status = 'O' THEN (SUM(T2.[LineTotal])) * -1 ELSE 0 END AS 'Otros Periodos'
FROM OQUT T0 INNER JOIN
OSLP T1 ON T0.SlpCode = T1.SlpCode INNER JOIN
QUT1 T2 ON T0.DocEntry = T2.DocEntry
WHERE (T0.DocDate BETWEEN '2011-01-01' AND '2011-08-03')
GROUP BY T1.[SlpName], T1.U_BKS_ZONA, U_Status
ORDER BY T1.U_BKS_ZONA, T1.SlpName

POR LOS ULTIMOS REGISTROS QUE ME PREGUNTAS ES QUE ASI QUIERO QUE ME QUEDE MI CONSULTA YA QUE UN VENDEDOR PUEDE TENER VENTAS ANULADAS APROBADAS Y PERDIDAS ME LO COLOCA EN LINEAS DIFERENTES Y SE REQUIERE ES EN LA MISMA LINEA QUE ESTEN LOS RESULTADOS PERO EN COLUMNAS DIFERENTE.
  #4 (permalink)  
Antiguo 04/08/2011, 15:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Agrupar y sumar que quede en una linea

mejor pon datos de tus tablas y cual es el resultado que deseas, porque no te entiendo bien que es lo que quieres con las ultimas columnas.

SAludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 04/08/2011, 15:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Agrupar y sumar que quede en una linea

Estos son datos del query:
Si nos fijamos bien el vendedor se repite tres veces pero es porque tiene ventas aprobadas perdidas y anuladas quiero los tres resultados en una misma linea

claudia arreaza val 131500.000000 119975.000000 0.000000 119975.000000 0.000000 0.000000
claudia arreaza val 156500.000000 201880.000000 0.000000 0.000000 201880.000000 0.000000
claudia arreaza val 2848750.000000 804122.000000 804122.000000 0.000000 0.000000 0.000000
gennifer piñero val 246500.000000 183470.000000 0.000000 0.000000 183470.000000 0.000000
gennifer piñero val 348900.000000 237098.500000 0.000000 237098.500000 0.000000 0.000000
gennifer piñero val 1636430.000000 1300221.400000 1300221.400000 0.000000 0.000000 0.000000
mariela ascanio val 583050.000000 410590.000000 0.000000 0.000000 410590.000000 0.000000
mariela ascanio val 838250.000000 572645.000000 0.000000 572645.000000 0.000000 0.000000
mariela ascanio val 14986950.000000 3055482.000000 3055482.000000 0.000000 0.000000 0.000000
nancy paola lucena val 5000.000000 7750.000000 0.000000 7750.000000 0.000000 0.000000
nancy paola lucena val 215000.000000 257862.500000 0.000000 0.000000 257862.500000 0.000000
nancy paola lucena val 927700.000000 736691.000000 736691.000000 0.000000 0.000000 0.000000
vilma aguilar val 49000.000000 62200.000000 0.000000 0.000000 62200.000000 0.000000
vilma aguilar val 1537440.000000 9434153.300000 9434153.300000 0.000000 0.000000 0.000000



gracias
  #6 (permalink)  
Antiguo 04/08/2011, 15:36
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Agrupar y sumar que quede en una linea

Código SQL:
Ver original
  1. SELECT
  2.  
  3. tabla1.SlpName,tabla1.U_BKS_ZONA, SUM(tabla1.[Cantidad de Formas]), SUM([Cotizados]), SUM(aprobados)....
  4.  
  5.  
  6. FROM(
  7. SELECT DISTINCT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados],
  8. CASE WHEN U_Status = 'A' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Aprobados',
  9. CASE WHEN U_Status = 'N' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Anulados',
  10. CASE WHEN U_Status = 'P' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Perdidos',
  11. CASE WHEN U_Status = 'O' THEN (SUM(T2.[LineTotal])) * -1 ELSE 0 END AS 'Otros Periodos'
  12. FROM OQUT T0 INNER JOIN
  13. OSLP T1 ON T0.SlpCode = T1.SlpCode INNER JOIN
  14. QUT1 T2 ON T0.DocEntry = T2.DocEntry
  15. WHERE (T0.DocDate BETWEEN '2011-01-01' AND '2011-08-03')
  16. GROUP BY T1.[SlpName], T1.U_BKS_ZONA, U_Status
  17. ORDER BY T1.U_BKS_ZONA, T1.SlpName
  18. ) tabla1 GROUP BY tabla1.SlpName,tabla1.U_BKS_ZONA

Prueba con algo asi :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 05/08/2011, 08:44
 
Fecha de Ingreso: agosto-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Agrupar y sumar que quede en una linea

Gracias por la respuesta en realidad lo estoy haciendo y me arroja el siguiente error:
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

SELECT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados]
FROM(SELECT DISTINCT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados],
CASE WHEN U_Status = 'A' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Aprobados',
CASE WHEN U_Status = 'N' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Anulados',
CASE WHEN U_Status = 'P' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Perdidos',
CASE WHEN U_Status = 'O' THEN (SUM(T2.[LineTotal])) * -1 ELSE 0 END AS 'Otros Periodos'
FROM OQUT T0 INNER JOIN
OSLP T1 ON T0.SlpCode = T1.SlpCode INNER JOIN
QUT1 T2 ON T0.DocEntry = T2.DocEntry
WHERE (T0.DocDate BETWEEN '2011-01-01' AND '2011-08-03')
GROUP BY T1.[SlpName], T1.U_BKS_ZONA
ORDER BY T1.[SlpName], T1.U_BKS_ZONA)
FROM OSLP T1
GROUP BY T1.[SlpName], T1.U_BKS_ZONA

no ubico el error, gracias por ayudar
  #8 (permalink)  
Antiguo 05/08/2011, 09:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Agrupar y sumar que quede en una linea

Sorry error mio :P


SELECT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados]
FROM(SELECT DISTINCT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados],
CASE WHEN U_Status = 'A' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Aprobados',
CASE WHEN U_Status = 'N' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Anulados',
CASE WHEN U_Status = 'P' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Perdidos',
CASE WHEN U_Status = 'O' THEN (SUM(T2.[LineTotal])) * -1 ELSE 0 END AS 'Otros Periodos'
FROM OQUT T0 INNER JOIN
OSLP T1 ON T0.SlpCode = T1.SlpCode INNER JOIN
QUT1 T2 ON T0.DocEntry = T2.DocEntry
WHERE (T0.DocDate BETWEEN '2011-01-01' AND '2011-08-03')
GROUP BY T1.[SlpName], T1.U_BKS_ZONA
)
FROM OSLP T1
GROUP BY T1.[SlpName], T1.U_BKS_ZONA


Prueba quitando el order by si no no te va a dejar probar la funcion :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 05/08/2011, 09:36
 
Fecha de Ingreso: agosto-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Agrupar y sumar que quede en una linea

Este es el error que da quitandole el order by

Msg 156, Level 15, State 1, Line 13
Incorrect syntax near the keyword 'FROM'.

SELECT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados]
FROM(SELECT DISTINCT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados],
CASE WHEN U_Status = 'A' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Aprobados',
CASE WHEN U_Status = 'N' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Anulados',
CASE WHEN U_Status = 'P' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Perdidos',
CASE WHEN U_Status = 'O' THEN (SUM(T2.[LineTotal])) * -1 ELSE 0 END AS 'Otros Periodos'
FROM OQUT T0 INNER JOIN
OSLP T1 ON T0.SlpCode = T1.SlpCode INNER JOIN
QUT1 T2 ON T0.DocEntry = T2.DocEntry
WHERE (T0.DocDate BETWEEN '2011-01-01' AND '2011-08-03')
GROUP BY T1.[SlpName], T1.U_BKS_ZONA)
FROM OSLP T1
GROUP BY T1.[SlpName], T1.U_BKS_ZONA

Gracias por estar pendiente de mi caso.
  #10 (permalink)  
Antiguo 05/08/2011, 09:46
 
Fecha de Ingreso: agosto-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Agrupar y sumar que quede en una linea

Cita:
Iniciado por Libras Ver Mensaje
Sorry error mio :P


SELECT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados]
FROM(SELECT DISTINCT T1.[SlpName], T1.U_BKS_ZONA, SUM(T2.U_BKS_CAMI) AS 'Cantidad de Formas', SUM(T2.[LineTotal]) AS [Cotizados],
CASE WHEN U_Status = 'A' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Aprobados',
CASE WHEN U_Status = 'N' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Anulados',
CASE WHEN U_Status = 'P' THEN (SUM(T2.[LineTotal])) ELSE 0 END AS 'Perdidos',
CASE WHEN U_Status = 'O' THEN (SUM(T2.[LineTotal])) * -1 ELSE 0 END AS 'Otros Periodos'
FROM OQUT T0 INNER JOIN
OSLP T1 ON T0.SlpCode = T1.SlpCode INNER JOIN
QUT1 T2 ON T0.DocEntry = T2.DocEntry
WHERE (T0.DocDate BETWEEN '2011-01-01' AND '2011-08-03')
GROUP BY T1.[SlpName], T1.U_BKS_ZONA
)
FROM OSLP T1
GROUP BY T1.[SlpName], T1.U_BKS_ZONA


Prueba quitando el order by si no no te va a dejar probar la funcion :)

Saludos!
  #11 (permalink)  
Antiguo 05/08/2011, 10:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Agrupar y sumar que quede en una linea

checa los parentesis creo que le falta uno.

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 05/08/2011, 12:04
 
Fecha de Ingreso: agosto-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Agrupar y sumar que quede en una linea

Gracias por tus respuestas... Ya vi y los parentesis estan bien... Seguire buscando a ver como lo agrupo... Gracias por tu ayuda...

Etiquetas: agrupar, linea, quede
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 08:05.