Consulta sem itens duplicado.

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Ter, 27 Mar 2018 4:08 pm

Boa tarde a todos, estou iniciando no forum, sou amante de tecnologia e autodidata, estou com um probleminha pra resolver, Criei um consulta onde pesquiso todos os pedidos feito em um determinado período, trazendo codigo, produto, qtde negociada, valor negociado, valor de tabela, custo, desconto e porcentagem, porem não pode haver código linhas com código de produto repetidos, as colunas tem que fazer a soma para cada item, já trouxe todos os dados, mais não consegui ainda remover as linnhas repetidas , abaixo o código, se alguém puder dar uma ajuda, agradeço muito

Código: Selecionar todos
SELECT DISTINCT
X.CODPROD
,X.DESCRPROD
,X.CODVOL
,X.QTDNEG AS QTDNEG
,ROUND(X.VLRTOT_ITEM,2) AS VLRTOT_NEGOCIADO
,ROUND(X.PRECOBASE,4) AS VLR_TABELA
,ROUND(X.TOTAL_VENDA,2) AS TOTAL_VENDA
,X.CUSTO
,ROUND((X.CUSTO * X.QTDNEG),2) AS CUSTO_X_QTDE
,ROUND(X.VALOR_DESCONTO,2) AS VALOR_DESCONTO

FROM (SELECT
ITE.CODPROD,
PRO.DESCRPROD,
SUM(ITE.QTDNEG) AS QTDNEG,
ITE.CODVOL,
ITE.PRECOBASE,
EXC.VLRVENDA,


CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS VLRTOT_ITEM,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.PRECOBASE * ITE.QTDNEG) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.PRECOBASE * ITE.QTDNEG + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS TOTAL_VENDA,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS VALOR_DESCONTO,

CASE WHEN CAB.CODTIPOPER = '51' THEN
ROUND(SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) / (SELECT SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
FROM TGFCAB CAB, TGFITE ITE, TGFPRO PRO
WHERE CAB.NUNOTA = ITE.NUNOTA
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND CAB.DTNEG BETWEEN  '01-03-2018' AND '26-03-2018'
AND ITE.CODPROD = PRO.CODPROD
AND CAB.TIPMOV = 'P'
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND PRO.USOPROD <> 'M') *100,2)
ELSE
ROUND(SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) / (SELECT SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) FROM TGFCAB CAB, TGFITE ITE, TGFPRO PRO
WHERE CAB.NUNOTA = ITE.NUNOTA
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND CAB.DTNEG BETWEEN '01-03-2018' AND '26-03-2018'
AND ITE.CODPROD = PRO.CODPROD
AND CAB.TIPMOV = 'P'
AND PRO.DESCRPROD NOT LIKE '%CX.%'
AND PRO.CODGRUPOPROD NOT IN(01050000,01050101)
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND PRO.USOPROD <> 'M' ) *100,2)
END AS PORCENTAGEM,
(SELECT
  EXC.VLRVENDA
  FROM TGFEXC EXC
  WHERE EXC.NUTAB = 36 AND EXC.CODPROD = ITE.CODPROD
)AS CUSTO

FROM TGFCAB CAB INNER JOIN TGFITE ITE ON (CAB.NUNOTA = ITE.NUNOTA)
                LEFT OUTER JOIN TGFPRO PRO ON (ITE.CODPROD = PRO.CODPROD)
                INNER JOIN TGFEXC EXC ON (EXC.CODPROD = ITE.CODPROD)

WHERE PRO.CODPROD IN (SELECT DISTINCT PROD1.CODPROD FROM TGFPRO PROD1 WHERE PROD1.CODPROD = PRO.CODPROD)
AND CAB.TIPMOV = 'P' AND CAB.DTNEG BETWEEN '01-03-2018' AND '26-03-2018'
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND PRO.CODGRUPOPROD NOT IN(01050101,01050102,01050103)
AND PRO.USOPROD <> 'M'

GROUP BY ITE.CODPROD,PRO.DESCRPROD,ITE.CODVOL,ITE.PRECOBASE,ITE.VLRDESC,CAB.CODTIPOPER,EXC.VLRVENDA,CAB.NUNOTA,QTDNEG

) X
GROUP BY X.CODPROD,X.DESCRPROD,X.CODVOL,X.QTDNEG,X.TOTAL_VENDA,X.PRECOBASE,X.VALOR_DESCONTO,X.CUSTO,X.VLRTOT_ITEM

ORDER BY X.CODPROD DESC;
ricardos1000
Localização: São Paulo

Mensagemem Seg, 09 Abr 2018 4:46 pm

Ele está somando as linhas repetidas ? É isso?
A tabela que ta trazendo linhas repetidas é a TGFITE ?

Se possível, manda pra gente uma amostra do resultado que você está tendo.
As vezes é um erro de JOIN, as vezes é realmente linhas duplicadas que precisam ser SOMADAS antes de fazer outros joins, etc...
dr_gori
Localização: Seattle, WA, USA

Thomas F. G

Mensagemem Qua, 18 Abr 2018 3:38 pm

Opa, certamente tem colunas com valores diferentes que acaba duplicando o resultado mesmo com esses GROUP BY e DISTINCT.

Por sinal, o DISTINCT aí se faz desnecessário, aparentemente o GROUP BY já teria esse trabalho de fazer a distinção.

No entanto, é estranho também, no SELECT ter os ROUND e no GROUP BY estar sem.
DanielNN
Localização: Fortaleza - CE

att,

Daniel N.N.



Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante