SubQuery
08/09/2007
0
to sofrendo mto aki com um select danado, e já quase doido, venho procurar ajuda hehe ...
Tenho um tabela que ja está estruturada e não podemos mais mexer nela, segue a estrutura principal:
[b]TAB_MOV[/b] ID_MOV HISTORICO TIPO (0 OU 1 -- SE FOR 0 É ENTRADA, SE FOR 1 É SAIDA) VALOR
Precisava que o SQL me retornasse alguma 2 Colunas:
(Entradas - Saidas) ... Preciso verificar, somar os valores agrupando pelo campo TIPO ...
Digamos que a tabela estivesse com os seguintes registros:
Assim, o SQL teria q me retornar isto:
alguem pode me ajudar ???
Output
Curtir tópico
+ 0Posts
08/09/2007
Marcelo.bastos
abaixo vai um exemplo de como você pode conseguir esse resultado na consulta.
SELECT
SUM(CASE WHEN TIPO = 0 THEN VALOR END) AS Entradas,
SUM(CASE WHEN TIPO = 1 THEN VALOR END) AS Saidas
FROM TAB_MOV
Valeu!
Gostei + 0
11/09/2007
Output
coisa fina [b:784a2d07cf]marcelo.bastos[/b:784a2d07cf]
vlw kra ... exatamente isto q eu procurava ...
abraço
Gostei + 0
11/09/2007
Output
outro select parecido ... Segue :
SELECT P.NOMEPLANODECONTAS, (CASE M.ID_PLANODECONTAS WHEN 100 THEN 101 ELSE M.ID_PLANODECONTAS END) AS ID_PLANODECONTAS, SUM(CASE WHEN M.TIPO = 0 THEN M.VALOR END) AS ENTRADAS, SUM(CASE WHEN M.TIPO = 1 THEN M.VALOR END) AS SAIDAS FROM MOVIMENTOLANC M INNER JOIN TURNOS T ON T.ID_TURNOS = M.ID_TURNOS INNER JOIN PLANODECONTAS P ON P.ID_PLANODECONTAS= M.ID_PLANODECONTAS WHERE M.DTACONTA = ´2007-09-11´ AND P.NOMEPLANODECONTAS LIKE ´¬VISA¬´ GROUP BY M.ID_PLANODECONTAS, P.NOMEPLANODECONTAS ORDER BY M.ID_PLANODECONTAS, P.NOMEPLANODECONTAS
Desta forma ele ta me retornando isto:
Isto ta errado, como eu pedi pra agrupar por M.ID_PLANODECONTAS ele deveria somar os dois primeiros registros acima citados ....
Alguem poderia me ajudar nessa ????
PS: O Primeiro Registro tinha ID=100 porem foi covertido pra 101 no select acima usando o CASE
Gostei + 0
12/09/2007
Emerson Nascimento
SELECT P.NOMEPLANODECONTAS, (CASE M.ID_PLANODECONTAS WHEN 100 THEN 101 ELSE M.ID_PLANODECONTAS END) AS IDPLANODECONTAS, -- note que não tem "_" SUM(CASE WHEN M.TIPO = 0 THEN M.VALOR ELSE 0.00 END) AS ENTRADAS, SUM(CASE WHEN M.TIPO = 1 THEN M.VALOR ELSE 0.00 END) AS SAIDAS FROM MOVIMENTOLANC M INNER JOIN TURNOS T ON T.ID_TURNOS = M.ID_TURNOS INNER JOIN PLANODECONTAS P ON P.ID_PLANODECONTAS= M.ID_PLANODECONTAS WHERE M.DTACONTA = ´2007-09-11´ AND P.NOMEPLANODECONTAS LIKE ´¬VISA¬´ GROUP BY IDPLANODECONTAS, P.NOMEPLANODECONTAS ORDER BY IDPLANODECONTAS, P.NOMEPLANODECONTAS
se isto não der certo, faça uso de sub-select:
SELECT NOMEPLANODECONTAS, ID_PLANODECONTAS, SUM(ENTRADAS) ENTRADAS, SUM(SAIDAS) SAIDAS FROM (SELECT P.NOMEPLANODECONTAS, (CASE M.ID_PLANODECONTAS WHEN 100 THEN 101 ELSE M.ID_PLANODECONTAS END) AS ID_PLANODECONTAS, SUM(CASE WHEN M.TIPO = 0 THEN M.VALOR ELSE 0.00 END) AS ENTRADAS, SUM(CASE WHEN M.TIPO = 1 THEN M.VALOR ELSE 0.00 END) AS SAIDAS FROM MOVIMENTOLANC M INNER JOIN TURNOS T ON T.ID_TURNOS = M.ID_TURNOS INNER JOIN PLANODECONTAS P ON P.ID_PLANODECONTAS= M.ID_PLANODECONTAS WHERE M.DTACONTA = ´2007-09-11´ AND P.NOMEPLANODECONTAS LIKE ´¬VISA¬´ GROUP BY M.ID_PLANODECONTAS, P.NOMEPLANODECONTAS) TABELA_TEMP GROUP BY NOMEPLANODECONTAS, ID_PLANODECONTAS ORDER BY ID_PLANODECONTAS, NOMEPLANODECONTAS
Gostei + 0
12/09/2007
Output
Deu Mesma coisa, ....
To quase doido ja com isto hehee...
Desde ja agradeço
Gostei + 0
12/09/2007
Emerson Nascimento
tente assim:
SELECT max(NOMEPLANODECONTAS) NOMEPLANODECONTAS, ID_PLANODECONTAS, SUM(ENTRADAS) ENTRADAS, SUM(SAIDAS) SAIDAS FROM (SELECT P.NOMEPLANODECONTAS, (CASE M.ID_PLANODECONTAS WHEN 100 THEN 101 ELSE M.ID_PLANODECONTAS END) AS ID_PLANODECONTAS, SUM(CASE WHEN M.TIPO = 0 THEN M.VALOR ELSE 0.00 END) AS ENTRADAS, SUM(CASE WHEN M.TIPO = 1 THEN M.VALOR ELSE 0.00 END) AS SAIDAS FROM MOVIMENTOLANC M INNER JOIN TURNOS T ON T.ID_TURNOS = M.ID_TURNOS INNER JOIN PLANODECONTAS P ON P.ID_PLANODECONTAS= M.ID_PLANODECONTAS WHERE M.DTACONTA = ´2007-09-11´ AND P.NOMEPLANODECONTAS LIKE ´¬VISA¬´ GROUP BY M.ID_PLANODECONTAS, P.NOMEPLANODECONTAS) TABELA_TEMP GROUP BY ID_PLANODECONTAS ORDER BY 1
Gostei + 0
12/09/2007
Output
vc salvou minha vida hehehehehe....
naum sabe o qto eu fiko agradecido por isto ...
Vc é mesmo mto fera!
Vlw msm ... Forte abraço,..
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)