cancel
Showing results for 
Search instead for 
Did you mean: 

Como realizar un sumatoria en sub-query

Former Member
0 Kudos

Jovenes tengo el siguiente query este me refleja el saldo acumulado de las cuenta bancarias pero necesito realizar una sumatoria de otra tabla, y no se como realizarla. La sumatoria es de la jdt1 la columna Debit y Credit por separado.

Query

SELECT T0.[Account], T0.[AcctName], T1.[CurrTotal]
FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account 
GROUP BY T0.[Account], T0.[AcctName], T1.[CurrTotal]

Espero me puedan ayudar y disculpen las molestias soy un poco novato en esto.

Saludos y muy agradecido.

Accepted Solutions (1)

Accepted Solutions (1)

former_member188440
Active Contributor
0 Kudos

Solo agrega un sum(debit), sum(credit)

podrias visualizarlo mejor con un union

Former Member
0 Kudos

Gracias Mauricio me podrias dar un ejemplo de como seria con UNION.

Saludos

former_member188440
Active Contributor
0 Kudos

Checa esta solucion

[]

Former Member
0 Kudos

Hola,

Prueba esta consulta a ver si te sirve:

SELECT T0.[Account], T0.[AcctName], T1.[CurrTotal], TMP.Debe, TMP.Haber FROM

(SELECT T3.Account, sum(T3.Debit)Debe, sum (T3.Credit)Haber FROM JDT1 T3 group by T3.Account) TMP INNER JOIN

OACT T1 ON TMP.Account = T1.AcctCode INNER JOIN DSC1 T0 ON T0.[GLAccount] = T1.AcctCode

INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account

GROUP BY T0.[Account], T0.[AcctName], T1.[CurrTotal], TMP.Account, TMP.Debe, TMP.Haber

Saludos,

Tere

Former Member
0 Kudos

Buenos dias, Tere te lo agradezco en efecto era lo que necesitaba solo que necesito verlo por rango de fecha por ejemplo solo el de un dia.

Pude realizar este query pero lamentablemente no me deplega todos los banco solo los que tienen movimiento no se porque alguien me podria ayuda el indicarme porque solo me muestra las cuenta que tienen movimiento.

SELECT T0.[Account], T0.[AcctName], T1.[CurrTotal],
	((SUM(T2.Debit)))AS 'Ingresos',
	((SUM(T2.Credit)))AS 'Egresos'
FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account 
Where T2.[RefDate] >= [%0] and  T2.[RefDate] <= [%1]
GROUP BY T0.[Account], T0.[AcctName], T1.[CurrTotal]

Former Member
0 Kudos

Gracias Mauricio te comento que lo intente hacer por medio de UNION pero me desplego el siguiente error All queries combined using a Union dejo el query para que me indiques en donde esta mi error.

SELECT T0.[Account], T0.[AcctName], T1.[CurrTotal]
FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account 
Where T2.[RefDate] >= [%0] and  T2.[RefDate] <= [%1]
GROUP BY T0.[Account], T0.[AcctName], T1.[CurrTotal]
UNION
SELECT T0.[Account], T0.[AcctName], T1.[CurrTotal],
              (((SUM(T2.Credit)+SUM(T1.CurrTotal))-SUM(T2.Debit))) as 'Saldo Inicial',
	((SUM(T2.Debit)))AS 'Ingresos',
	((SUM(T2.Credit)))AS 'Egresos'
FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account 
Where T2.[RefDate] >= [%0] and  T2.[RefDate] <= [%1]
GROUP BY T0.[Account], T0.[AcctName], T1.[CurrTotal]

De antemano agradezco toda tu ayuda.

former_member188440
Active Contributor
0 Kudos

Lo que pasa es que cuando usas un UNION necesitas que los datos de las consultas, en este caso las 2 que estas uniendo sean los mismos tipos de datos y la misma cantidad de columnas

El union basicamente debe traerte unicamente el sum, el resto de las columnas puedes simplemente poner un



select '','','',sum(doctotal),sum(vatsum)

Asi

Former Member
0 Kudos

Hola,

Ese error te aparece porque al usar el UNION las condultas tienen que tener la misma cantidad de campos en el SELECT, en este caso basta con que los sustitutas en la primera consulta por '0'. Te la reenvío modificada:

SELECT T0.[Account], T0.[AcctName], T1.[CurrTotal], 0, 0, 0

FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account

Where T2.[RefDate] >= and T2.[RefDate] <=

GROUP BY T0.[Account], T0.[AcctName], T1.[CurrTotal]

UNION

SELECT T0.[Account], T0.[AcctName], T1.[CurrTotal],

(((SUM(T2.Credit)+SUM(T1.CurrTotal))-SUM(T2.Debit))) as 'Saldo Inicial',

((SUM(T2.Debit)))AS 'Ingresos',

((SUM(T2.Credit)))AS 'Egresos'

FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account

Where T2.[RefDate] >= and T2.[RefDate] <=

GROUP BY T0.[Account], T0.[AcctName], T1.[CurrTotal]

Saludos,

Tere

Former Member
0 Kudos

Gracias Mauricio, pero fijate que sigue dando el mismo error que es el siguiente:

Msg 205, Level 16, State 1, Line 1
All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.

y el query hasta donde te entendi quedo asi

 SELECT T0.Account, T0.AcctName, T1.CurrTotal
	FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account
		Where T2.RefDate >= '20110406' and T2.RefDate <= '20110406'
	GROUP BY T0.Account, T0.AcctName, T1.CurrTotal
UNION
SELECT '', '', '',
	(((SUM(T2.Credit)+SUM(T1.CurrTotal))-SUM(T2.Debit))) as 'Saldo Inicial',
	((SUM(T2.Debit)))AS 'Ingresos',
	((SUM(T2.Credit)))AS 'Egresos'
FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account
	Where T2.RefDate >= '20110406' and T2.RefDate <= '20110406'
GROUP BY T0.Account, T0.AcctName, T1.CurrTotal 

Gracias por ayuda y perdon por no entender este proceso.

Saludos

former_member188440
Active Contributor
0 Kudos

intentalo asi


select Account as 'Cuenta',AcctName as'Nombre',CurrTotal as 'saldo', [Saldo Inicial],[Ingresos],[Egresos] from (
SELECT T0.Account, T0.AcctName, T1.CurrTotal, 0 [Saldo Inicial],0 [Ingresos],0 [Egresos]
	FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account
		Where T2.RefDate >= '20110101' and T2.RefDate <= '20110406'
	GROUP BY T0.Account, T0.AcctName, T1.CurrTotal
UNION
SELECT T0.Account, T0.AcctName, T1.CurrTotal,
	(((SUM(T2.Credit)+SUM(T1.CurrTotal))-SUM(T2.Debit))) [Saldo Inicial],
	((SUM(T2.Debit)))[Ingresos],
	((SUM(T2.Credit)))AS [Egresos]
FROM DSC1 T0 INNER JOIN OACT T1 ON T0.GLAccount = T1.AcctCode INNER JOIN JDT1 T2 ON T1.AcctCode = T2.Account
	Where T2.RefDate >= '20110101' and T2.RefDate <= '20110406'
GROUP BY T0.Account, T0.AcctName, T1.CurrTotal 

) a

Asi mejor

Edited by: Mauricio I Quintana on Apr 6, 2011 4:57 PM

Former Member
0 Kudos

Gracias Mauricio esta super el query y te agradezco por tu paciencia.

Solo una consulta y doy por terminado esta duda, el query que me proporcionate es de todo el año 2011 y si necesito verlo solo del dia ej. el dia de hoy, lo que hice fue colocarle la fecha del dia de hoy pero solo me muestra las cuentas que tiene movimiento y las que no tienen movimiento no las muestra por lo menos deveria mostrarme los saldos finales de la cuenta, pero no lo hace, se puede realizar esto o me estan pidiendo mucho.

Saludos y muy agardecido por tu ayuda.

former_member188440
Active Contributor
0 Kudos

Ok, creo que ahi ya necesitas jugar con quizas mas unions o con las tablas que estas consultando

La fecha solo te la puse como ejemplo, pero si lo vas a ejecutar desde SAP pues ya cambias el valor por las famosas


[%0]

Former Member
0 Kudos

Gracias Mauricio voy a seguir provando al resultado deseado.

Gracias por toda la ayuda.

Saludos

Answers (0)