SQL - Agrupación de datos

 
Vista:
Imágen de perfil de Nancy
Val: 3
Ha disminuido su posición en 8 puestos en SQL (en relación al último mes)
Gráfica de SQL

Agrupación de datos

Publicado por Nancy (2 intervenciones) el 10/07/2019 16:08:10
Hola buen día, soy nueva aquí y tengo una duda sobre mi código en uno de mis parámetros me piden que sea sumado, pero al momento de sumarlo me pide agrupar por todos los demás, pero esto hace que me triga datos duplicados, entonces me gustaría saber como agregar esa sumatoria sin tener que agrupar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT
T0.[CardCode],
T0.[CardName],
T0.[DocNum],
T0.[DocEntry],
T0.[DocDate],
T1.[SlpName],
SUM(T2.[LineTotal]) AS 'Líneas Totales'
 
FROM OINV T0
INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN INV1 T2 ON T0.[DocEntry] = T2.[DocEntry]
 
 
WHERE
T0.[DocStatus]  = 'O'
AND T0.[isIns] = 'Y'
AND T0.[CANCELED]  = 'N'


GROUP BY T0.[CardCode],T0.[CardName],T0.[DocNum],T0.[DocEntry],T0.[DocDate],T1.[SlpName],T2.[LineTotal]
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

Agrupación de datos

Publicado por leonardo_josue (1173 intervenciones) el 10/07/2019 17:03:37
Hola Nancy:

1
2
me piden que sea sumado, pero al momento de sumarlo me pide agrupar por todos los demás, pero esto hace
que me triga datos duplicados, entonces me gustaría saber como agregar esa sumatoria sin tener que agrupar.

¿Y dónde están los datos? es decir, sin los datos de tus tablas resulta complicado decirte dónde exactamente está el problema.

Tampoco mencionas con qué BD's estás trabajando. Este dato es muy importante que lo digas siempre que publiques en este foro, ya que cada DBMS maneja una sintaxis particular y no todo es SQL Estándar.

ahora bien, tratando de jugar al adivino, te comento que en las agrupaciones, DEBES DE PONER TODOS LOS CAMPOS QUE NO FORMAN PARTE DE UNA FUNCIÓN DE AGREGACIÓN. en este caso, está de más que agrupes por el campo T2.[LineTotal], ya que este forma parte de la función de agrupación SUM.

Prueba tu consulta así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
  T0.[CardCode],
  T0.[CardName],
  T0.[DocNum],
  T0.[DocEntry],
  T0.[DocDate],
  T1.[SlpName],
  SUM(T2.[LineTotal]) AS 'Líneas Totales'
FROM OINV T0
INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN INV1 T2 ON T0.[DocEntry] = T2.[DocEntry]
WHERE
  T0.[DocStatus] = 'O'
  AND T0.[isIns] = 'Y'
  AND T0.[CANCELED] = 'N'
GROUP BY
  T0.[CardCode],
  T0.[CardName],
  T0.[DocNum],
  T0.[DocEntry],
  T0.[DocDate],
  T1.[SlpName]

Si esto no funciona te repito, postea los datos que tienes en cada una de tus tablas y a partir de esos datos dinos qué es lo que esperas obtener como salida.

Saludos
Leo.
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 Eliza
Val: 3
Ha disminuido su posición en 8 puestos en SQL (en relación al último mes)
Gráfica de SQL

Agrupación de datos

Publicado por Eliza (2 intervenciones) el 10/07/2019 17:50:08
S1


Mi versión de sql es 2012 , te explico en la primer imagen son los datos que salen del primer código, si lo hago así agrupando y sumando mi campo, en la segunda imagen y adjunto el código de eso es sumando ese campo pero haciéndolo como subconsulta para no tener que agrupar todos los demás valores, pero cuando hago esto me arroja una cantidad grande en el T2.LineTotal ya que veo que me trae la suma total, lo que quiero es que me triga la suma total pero de cada T0.CardCode y es verdad en el group by con el campo T2.[LineTotal], se me fue al momento de agregar los otros.
En resumen lo que quiero es algo mas a este segundo código pero no logro saber como traer la suma de LineTotal por cada CardCode.


SELECT
T0.[CardCode],
T0.[CardName],
T0.[DocNum],
T0.[DocEntry],
T0.[DocDate],
T1.[SlpName],
((SELECT SUM(S0.[LineTotal]) FROM INV1 S0 INNER JOIN OSLP S1 ON S0.[SlpCode] = S1.[SlpCode])) AS 'Total Líneas'

FROM OINV T0
INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN INV1 T2 ON T0.[DocEntry] = T2.[DocEntry]


WHERE
T0.[DocStatus] = 'O'
AND T0.[isIns] = 'Y'
AND T0.[CANCELED] = 'N'



s2
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