Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
buenas pessoal..
estou com um problema em um comparativo entre duas tabelas.. uma tabela eu tenho o o resultado das metas e do mix de produtos vendidos na empresa.. calça, camisa, casacos.. etc..
na outra tabela esta o resultado da venda desses produtos.. preciso de um comparativo que me dê o resultado do que foi vendido.. mas o que não foi vendido liste tambem.. quando comparo a coluna MIX_PRODUTO como igual ela traz o resultado da venda correta mas só o que o representante vendeu.. como está na imagem..
quando comparo como diferente ele traz todo o mix.. mas ele lista a soma da venda para todo o mix no caso ali embaixo 110 peças e diminui a quantidade vendida...
o que preciso é que fique como na segunda imagem.. listando todo o mix, mas aparecendo somente a venda que tem na imagem 1... me fiz entender?
SELECT
A.CD_MARCA, A.DS_MARCA, A.CD_REPRESENTANTE, A.NM_REPRESENTANTE ,A.DS_MUNICIPIO ,A.DS_SIGLA_EST ,A.CD_CLIENTE ,A.NM_CLIENTE,D.MIX_PRODUTO
,SUM(A.QT_SALDO) as QT_REAL
FROM IM_DEMANDA A
INNER JOIN IM_PERFORMANCE_MIX D ON (D.CD_PERIODO = A.CD_PERIODO) AND (D.CD_MARCA = A.CD_MARCA) AND (D.CD_REPRESENTANTE = A.CD_REPRESENTANTE)
AND (D.MIX_PRODUTO = A.MIX_PRODUTO)
WHERE
A.CD_CLIENTE = '379'
AND A.CD_MARCA = '3'
AND A.CD_PERIODO = '8'
GROUP BY
A.CD_MARCA, A.DS_MARCA, A.CD_REPRESENTANTE, A.NM_REPRESENTANTE, A.DS_MUNICIPIO, A.DS_SIGLA_EST
,A.CD_CLIENTE
,A.NM_CLIENTE
,D.MIX_PRODUTO
/monthly_2018_09/2.png.037b6b1810a581aeeeeb3da98cb2b97c.png" />
SELECT
A.CD_MARCA, A.DS_MARCA, A.CD_REPRESENTANTE, A.NM_REPRESENTANTE ,A.DS_MUNICIPIO ,A.DS_SIGLA_EST ,A.CD_CLIENTE ,A.NM_CLIENTE,D.MIX_PRODUTO
,SUM(A.QT_SALDO) as QT_REAL
FROM IM_DEMANDA A
INNER JOIN IM_PERFORMANCE_MIX D ON (D.CD_PERIODO = A.CD_PERIODO) AND (D.CD_MARCA = A.CD_MARCA) AND (D.CD_REPRESENTANTE = A.CD_REPRESENTANTE)
AND (D.MIX_PRODUTO <> A.MIX_PRODUTO)
WHERE
A.CD_CLIENTE = '379'
AND A.CD_MARCA = '3'
AND A.CD_PERIODO = '8'
GROUP BY
A.CD_MARCA, A.DS_MARCA, A.CD_REPRESENTANTE, A.NM_REPRESENTANTE, A.DS_MUNICIPIO, A.DS_SIGLA_EST
,A.CD_CLIENTE
,A.NM_CLIENTE
,D.MIX_PRODUTO
/monthly_2018_09/1.png.f0cd90a55d0d57491ba71fef8e0e6ed9.png" />
>
3 horas atrás, Motta disse:
Uma solução nestes casos é forçar um valor zerado (por UNION) para que os produtos não vendidos sejam comparados, segue [exemplo](/topic/522521-for%C3%A7ar-select-trazer-linha-mesmo-que-sem-valor/?do=findComment&comment=2079146).
Continua com o resultado de quatro linhas.. mas não sei se fiz da maneira correta..
SELECT
A.CD_MARCA
,A.DS_MARCA
,A.CD_REPRESENTANTE
,A.NM_REPRESENTANTE
,A.DS_MUNICIPIO
,A.DS_SIGLA_EST
,A.CD_CLIENTE
,A.NM_CLIENTE
,D.MIX_PRODUTO
--,D.QT_META
,SUM(A.QT_SALDO) AS QT_REAL
--,SUM(A.VL_SALDONEG) AS VL_REAL
FROM IM_DEMANDA A
LEFT JOIN IM_PERFORMANCE_MIX D ON D.CD_PERIODO = A.CD_PERIODO AND D.CD_MARCA = A.CD_MARCA AND D.CD_REPRESENTANTE = A.CD_REPRESENTANTE AND D.MIX_PRODUTO = A.MIX_PRODUTO
WHERE
A.CD_MARCA = '3'
AND A.CD_PERIODO = '8'
AND NOT A.CD_REPRESENTANTE = 90020
AND A.CD_CLIENTE = 379
GROUP BY
A.CD_MARCA
,A.DS_MARCA
,A.CD_REPRESENTANTE
,A.NM_REPRESENTANTE
,A.DS_MUNICIPIO
,A.DS_SIGLA_EST
,A.CD_CLIENTE
,A.NM_CLIENTE
,D.MIX_PRODUTO
UNION ALL
SELECT
A.CD_MARCA
,A.DS_MARCA
,A.CD_REPRESENTANTE
,A.NM_REPRESENTANTE
,A.DS_MUNICIPIO
,A.DS_SIGLA_EST
,A.CD_CLIENTE
,A.NM_CLIENTE
,D.MIX_PRODUTO
--,D.QT_META
,SUM(A.QT_SALDO) AS QT_REAL
--,SUM(A.VL_SALDONEG) AS VL_REAL
FROM IM_DEMANDA A
LEFT JOIN IM_PERFORMANCE_MIX D ON D.CD_PERIODO = A.CD_PERIODO AND D.CD_MARCA = A.CD_MARCA AND D.CD_REPRESENTANTE = A.CD_REPRESENTANTE AND D.MIX_PRODUTO = A.MIX_PRODUTO
WHERE
A.CD_MARCA = '3'
AND A.CD_PERIODO = '8'
AND NOT A.CD_REPRESENTANTE = 90020
AND D.MIX_PRODUTO = ' '
AND A.MIX_PRODUTO = ' '
AND A.CD_CLIENTE = '379'
--AND B.CD_PERIODO IN ('6', '7','8')
GROUP BY
A.CD_MARCA
,A.DS_MARCA
,A.CD_REPRESENTANTE
,A.NM_REPRESENTANTE
,A.DS_MUNICIPIO
,A.DS_SIGLA_EST
,A.CD_CLIENTE
,A.NM_CLIENTE
,D.MIX_PRODUTO
--,D.QT_META
,D.MIX_PRODUTO
--,A.QT_SALDO
Você tem de usar o sql das metas e o sql das vendas , você precisa cruzá-las
grosso modo
--metas
select cod_produto, valor_meta
from metas
--vendas
select cod_produto,sum(valor0 valor_venda
from vendas
group by cod_produto
só que nem todo produto foi vendido , assim se cria uma sql saindo do zero
--produtos
select cod_produto ,0 valor_venda
from produto
--unindo
select cod_produto,sum(valor_venda) valor_venda
from
(
select cod_produto,sum(valor0 valor_venda
from vendas
group by cod_produto
union all
select cod_produto ,0 valor_venda
from produto
) group by cod_produto
---comparando
select *
from
(
select cod_produto, valor_meta
from metas) meta,
(
select cod_produto,sum(valor_venda) valor_venda
from
(
select cod_produto,sum(valor0 valor_venda
from vendas
group by cod_produto
union all
select cod_produto ,0 valor_venda
from produto
) group by cod_produto
) venda
where venda.cod_produto = meta.cod_produtovaleu.!!
Uma solução nestes casos é forçar um valor zerado (por UNION) para que os produtos não vendidos sejam comparados, segue exemplo.