Necesito agrupar por un solo campo SQL

publicado por: Anonymous

tengo que hacer lo siguiente

/** PRIMER CAMPO - TRANSACCION **/

/** SEGUNDO CAMPO - DEBITO SALDO POR TRANSACCION**/

select TransaccionId,SUM(NetAmount) as debito from TablaPrincipal where Id_movimiento = 1 group by TransaccionId (RESULTADO QUE DEBERIA DAR)


/** TERCER CAMPO -  CREDITO SALDO POR TRANSACCION**/

select TransaccionId,SUM(NetAmount) as credito from TablaPrincipal where Id_movimiento = 2 group by TransaccionId  (RESULTADO QUE DEBERIA DAR)


/** CUARTO CAMPO - CANTIDAD DE CUENTAS POR TRANSACCION **/

select TransaccionId, COUNT(AccountCode) as CantidadCuentas from TablaPrincipal group by TransaccionId  (RESULTADO QUE DEBERIA DAR)


/** QUINTO CAMPO -  CANTIDA DE FECHAS EFECTIVAS POR TRANSACCION **/

select  TransaccionId, COUNT(EffectiveDate) as CantidadFechas from TablaPrincipal group by TransaccionId  (RESULTADO QUE DEBERIA DAR)


/** ULTIMO CAMPO - FECHA DE CREACION DE LA TRANSACCION

yo hice esta query:

select TransaccionId, 
(select COUNT(AccountCode) from TablaPrincipal) as CantidadCuentas,
(select SUM(NetAmount) from TablaPrincipal where Id_movimiento = 1) as debito,
(select SUM(NetAmount) from TablaPrincipal where Id_movimiento = 2) as credito,
(select COUNT(EffectiveDate) from TablaPrincipal) as CantidadFechas,
CreatedDate
from TablaPrincipal
group by TransaccionId, CreatedDate

El problema es el siguiente me trae los resultados totales de la tabla en cada columna donde estan hechas las subconsultas y no por transaccion (PRIMER CAMPO) como se desea.

Tengo las subconsultas hechas que la pueden ver mas arriba pero nose
como integrarla a la query que hice.

Desde ya agradezco su ayuda

solución

te falta nada más poner un WHERE dentro de la subconsulta, para poder filtrar los registros que sea igual a TransaccionId.

Este ejemplo es una solución:

SELECT tp.TransaccionId,
(
   SELECT COUNT(sub.AccountCode) FROM TablaPrincipal sub WHERE sub.TransaccionId=tp.TransaccionId
) AS CantidadCuentas,
(
   SELECT SUM(sub.NetAmount) FROM TablaPrincipal sub WHERE sub.TransaccionId=tp.TransaccionId AND Id_movimiento = 1
) AS debito,
(
   SELECT SUM(sub.NetAmount) FROM TablaPrincipal sub WHERE sub.TransaccionId=tp.TransaccionId AND Id_movimiento = 2
) AS credito,
(
   SELECT COUNT(sub.EffectiveDate) FROM TablaPrincipal sub WHERE sub.TransaccionId=tp.TransaccionId
) AS CantidadFechas,
tp.CreatedDate
FROM TablaPrincipal tp
GROUP BY tp.TransaccionId, tp.CreatedDate;
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *