Array
(
)

SubQuery

Output
   - 08 set 2007

Ola Boa tarde galera!
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:

#Código

[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:

Citação:
ID_MOV ---> HISTORICO ----> TIPO ---> VALOR
1................. TESTE................0..............5,00
2.................TESTE.................1..............10,00
3..................TESTE................0..............4,00


Assim, o SQL teria q me retornar isto:

Citação:
Entradas --- Saidas
9,00 ..........10,00


alguem pode me ajudar ???


Marcelo.bastos
   - 08 set 2007

Output,

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!


Output
   - 11 set 2007

ow ...
coisa fina marcelo.bastos

vlw kra ... exatamente isto q eu procurava ...
abraço


Output
   - 11 set 2007

Blz ... agora aproveitando tópico ...
outro select parecido ... Segue :

#Código

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:

Citação:
NOMEPLANODECONTAS - ID_PLANODECONTAS - ENTRADAS - SAIDAS
DESPESAS CARTAO VISA - 101 - 2,55
CARTAO VISA - 101 - 99,45
CARTAO MASTERCARD - 130 - 30,00


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


Emerson
   - 12 set 2007

veja se funciona: dê um nome diferente ao campo e tente agrupar por esse novo campo.
#Código

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:
#Código
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



Output
   - 12 set 2007

Putz ... pior q naum deu cara ...
Deu Mesma coisa, ....


Citação:
NOMEPLANODECONTAS ---- ID_PLANODECONTAS - ENTRADAS - SAIDAS
DESPESAS CARTAO VISA - 101 ---------------------- 2,55 ---------0,00
CARTAO VISA - -------------101 -----------------------99,45---------0,00
CARTAO MASTERCARD -----130 -----------------------30,00--------0,00


To quase doido ja com isto hehee...
Desde ja agradeço


Emerson
   - 12 set 2007

não está funcionando por causa do campo NOMEPLANODECONTAS

tente assim:
#Código

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



Output
   - 12 set 2007

Perfeito kra ...
vc salvou minha vida hehehehehe....
naum sabe o qto eu fiko agradecido por isto ...
Vc é mesmo mto fera!
Vlw msm ... Forte abraço,..