Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal,
sou novo por aqui!
espero que estejam todos bem!
tenho um problema e se alguém conseguisse me ajudar eu ficaria muito grato.
observem minha query abaixo, estou utilizando case como condição para uma coluna e no final quero agrupar somente pelos dois primeiros campos CODIGOREFERENCIA e NOME porém o SQL exige que utilizemos os outros dois campos que estão dentro do case.
como solucionar? pois não da para utilizar o apelido da nova coluna que contém o case no gropu By Ex.: 'SAIDA_ENTRADA'
Abraços e tenham um ótimo dia!
SELECT B.CODIGOREFERENCIA,
B.NOME,
SUM(A.QUANTIDADE),
CASE WHEN A.SALDOATUAL < A.SALDOANTERIOR THEN 'SAIDA' ELSE 'ENTRADA' END AS 'SAIDA_ENTRADA'
FROM PD_MOVIMENTACAOVARIACAO AS A
LEFT OUTER JOIN PD_PRODUTOS AS B ON (B.HANDLE = A.PRODUTO)
LEFT OUTER JOIN PD_ALMOXARIFADOS AS C ON (C.HANDLE = A.ALMOXARIFADOORIGEM)
LEFT OUTER JOIN PD_ALMOXARIFADOS AS D ON (D.HANDLE = A.ALMOXARIFADODESTINO)
LEFT OUTER JOIN GN_PESSOAS AS E ON (E.HANDLE = A.PESSOA)
LEFT OUTER JOIN Z_GRUPOUSUARIOS AS F ON (F.HANDLE = A.USUARIO)
LEFT OUTER JOIN GN_OPERACOES AS G ON (G.HANDLE = A.OPERACAO)
WHERE DATAHORAMOVIMENTACAO BETWEEN CONVERT(DATETIME, '01/01/2017 00:00:00', 103) AND CONVERT(DATETIME, '10/01/2017 05:00:00',
103)
AND B.GRUPO IS NOT NULL
GROUP BY B.CODIGOREFERENCIA,
B.NOMESe entendi o problema, tenta uma sub-query:
SELECT * FROM(
SELECT B.CODIGOREFERENCIA,
B.NOME,
SUM(A.QUANTIDADE),
CASE WHEN A.SALDOATUAL < A.SALDOANTERIOR THEN 'SAIDA' ELSE 'ENTRADA' END AS 'SAIDA_ENTRADA'
FROM PD_MOVIMENTACAOVARIACAO AS A
LEFT OUTER JOIN PD_PRODUTOS AS B ON (B.HANDLE = A.PRODUTO)
LEFT OUTER JOIN PD_ALMOXARIFADOS AS C ON (C.HANDLE = A.ALMOXARIFADOORIGEM)
LEFT OUTER JOIN PD_ALMOXARIFADOS AS D ON (D.HANDLE = A.ALMOXARIFADODESTINO)
LEFT OUTER JOIN GN_PESSOAS AS E ON (E.HANDLE = A.PESSOA)
LEFT OUTER JOIN Z_GRUPOUSUARIOS AS F ON (F.HANDLE = A.USUARIO)
LEFT OUTER JOIN GN_OPERACOES AS G ON (G.HANDLE = A.OPERACAO)
WHERE DATAHORAMOVIMENTACAO BETWEEN CONVERT(DATETIME, '01/01/2017 00:00:00', 103) AND CONVERT(DATETIME, '10/01/2017 05:00:00',
103)
AND B.GRUPO IS NOT NULL
GROUP BY B.CODIGOREFERENCIA,
B.NOME
)t
GROUP BY t.SAIDA_ENTRADABoa tarde, tentei mas deu erro EdCesar
mas estive quebrando a cabeça aqui desde cedo e consegui!
o que fiz de diferente foi inserir o mesmo case do select na agregação (group by) porém sem o apelido (AS)
eu não sabia que dava.
segue abaixo caso alguém passe pelo mesmo perrengue que passei!
muito obrigado pelo apoio!
SELECT B.CODIGOREFERENCIA, B.NOME,
SUM(A.QUANTIDADE),
CASE WHEN A.SALDOATUAL < A.SALDOANTERIOR THEN 'SAIDA' ELSE 'ENTRADA' END AS 'SAIDA_ENTRADA'
FROM PD_MOVIMENTACAOVARIACAO AS A
LEFT OUTER JOIN PD_PRODUTOS AS B ON (B.HANDLE = A.PRODUTO)
LEFT OUTER JOIN PD_ALMOXARIFADOS AS C ON (C.HANDLE = A.ALMOXARIFADOORIGEM)
LEFT OUTER JOIN PD_ALMOXARIFADOS AS D ON (D.HANDLE = A.ALMOXARIFADODESTINO)
LEFT OUTER JOIN GN_PESSOAS AS E ON (E.HANDLE = A.PESSOA)
LEFT OUTER JOIN Z_GRUPOUSUARIOS AS F ON (F.HANDLE = A.USUARIO)
LEFT OUTER JOIN GN_OPERACOES AS G ON (G.HANDLE = A.OPERACAO)
WHERE DATAHORAMOVIMENTACAO BETWEEN CONVERT(DATETIME, '01/01/2017 00:00:00', 103) AND CONVERT(DATETIME, '10/01/2017 05:00:00',
103)
AND B.GRUPO IS NOT NULL
GROUP BY B.CODIGOREFERENCIA,
B.NOME,
CASE WHEN A.SALDOATUAL < A.SALDOANTERIOR THEN 'SAIDA' ELSE 'ENTRADA' END>
1 hora atrás, Wilson David Marques disse:
Não entendi amigo, como assim parecendo um texto?
estou utilizando essa query normalmente aqui na empresa, somente estou com o problema no group by
sou novo aqui e agora que vi que é possível inserir code ao invés de colocar o comando diretamente no post.
obrigado.
abraços!
>
1 hora atrás, Rapadura disse:
isso ai ta parecendo mais um texto
Não entendi amigo, como assim parecendo um texto?
estou utilizando essa query normalmente aqui na empresa, somente estou com o problema no group by