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,..