Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho o select abaixo, só que ele está trazendo duas linhas para o mesmo produto, ele traz uma linha para o d.tipo = '0' e outra para o d.tipo = '1', preciso que na mesma linha mostre os 2.
Onde estou errando?
SELECT STRAIGHT_JOIN DISTINCT TMP.*
FROM (
SELECT DISTINCT d.cat_id AS prod
, p.id
, p.nome AS id_prod
, SUM(d.qtd) AS qtd_prod
, SUM(d.valor_total) AS total_prod
, SUM(0) AS qtd_estoque
FROM lc_controle c
INNER JOIN lc_detalhe d ON d.controle_id = c.id
INNER JOIN lc_cat p ON p.id = d.cat_id
WHERE d.tipo = '0'
AND c.dtConcat BETWEEN '2018-05-01' AND '2018-08-05'
AND c.exportado = 'Sim'
GROUP BY prod
UNION all
SELECT STRAIGHT_JOIN DISTINCT d.cat_id AS prod
, p.id
, p.nome AS id_prod
, SUM(0) AS qtd_prod
, SUM(0) AS total_prod
, SUM(d.qtd) AS qtd_estoque
FROM lc_controle c
INNER JOIN lc_detalhe d ON d.controle_id = c.id
INNER JOIN lc_cat p ON p.id = d.cat_id
WHERE d.tipo = '1'
AND c.dtConcat < '2018-08-05'
AND c.exportado = 'Sim'
GROUP BY prod
) TMP
ORDER BY TMP.qtd_prod DESCda erro, poderia me dizer como usar por favor?
Fiz assim e da erro:
SELECT DISTINCT TMP.*
FROM (
GROUP_CONCAT( SELECT DISTINCT d.cat_id AS prod)
, p.id
, p.nome AS id_prod
, SUM(d.qtd) AS qtd_prod
, SUM(d.valor_total) AS total_prod
, SUM(0) AS qtd_estoque
FROM lc_controle c
INNER JOIN lc_detalhe d ON d.controle_id = c.id
INNER JOIN lc_cat p ON p.id = d.cat_id
WHERE d.tipo = '0'
AND c.dtConcat BETWEEN '2018-05-01' AND '2018-08-05'
AND c.exportado = 'Sim'
group by prod, id_prod
UNION
GROUP_CONCAT( SELECT DISTINCT d.cat_id AS prod)
, p.id
, p.nome AS id_prod
, SUM(0) AS qtd_prod
, SUM(0) AS total_prod
, SUM(d.qtd) AS qtd_estoque
FROM lc_controle c
INNER JOIN lc_detalhe d ON d.controle_id = c.id
INNER JOIN lc_cat p ON p.id = d.cat_id
WHERE d.tipo = '1'
AND c.dtConcat < '2018-08-05'
AND c.exportado = 'Sim'
group by prod, id_prod
) TMPe desse outro modo ele continua com os resultados duplicados.
SELECT DISTINCT TMP.*
FROM (
SELECT GROUP_CONCAT( DISTINCT d.cat_id)
, p.id
, p.nome AS id_prod
, SUM(d.qtd) AS qtd_prod
, SUM(d.valor_total) AS total_prod
, SUM(0) AS qtd_estoque
FROM lc_controle c
INNER JOIN lc_detalhe d ON d.controle_id = c.id
INNER JOIN lc_cat p ON p.id = d.cat_id
WHERE d.tipo = '0'
AND c.dtConcat BETWEEN '2018-05-01' AND '2018-08-05'
AND c.exportado = 'Sim'
group by d.cat_id
UNION
SELECT GROUP_CONCAT( DISTINCT d.cat_id)
, p.id
, p.nome AS id_prod
, SUM(0) AS qtd_prod
, SUM(0) AS total_prod
, SUM(d.qtd) AS qtd_estoque
FROM lc_controle c
INNER JOIN lc_detalhe d ON d.controle_id = c.id
INNER JOIN lc_cat p ON p.id = d.cat_id
WHERE d.tipo = '1'
AND c.dtConcat < '2018-08-05'
AND c.exportado = 'Sim'
group by d.cat_id
) TMPCreio ser isto
SELECT STRAIGHT_JOIN prod,id_prod,ID,qtd_prod,total_prod,qtd_estoque,
GROUP_CONCAT(DISTINCT TIPO
ORDER BY TIPO DESC SEPARATOR ' ') TIPOS
FROM (
SELECT DISTINCT d.cat_id AS prod
, p.id
, p.nome AS id_prod
, d.tipo AS TIPO
, SUM(d.qtd) AS qtd_prod
, SUM(d.valor_total) AS total_prod
, SUM(0) AS qtd_estoque
FROM lc_controle c
INNER JOIN lc_detalhe d ON d.controle_id = c.id
INNER JOIN lc_cat p ON p.id = d.cat_id
WHERE d.tipo = '0'
AND c.dtConcat BETWEEN '2018-05-01' AND '2018-08-05'
AND c.exportado = 'Sim'
GROUP BY prod
UNION all
SELECT STRAIGHT_JOIN DISTINCT d.cat_id AS prod
, p.id
, p.nome AS id_prod
, d.tipo AS TIPO
, SUM(0) AS qtd_prod
, SUM(0) AS total_prod
, SUM(d.qtd) AS qtd_estoque
FROM lc_controle c
INNER JOIN lc_detalhe d ON d.controle_id = c.id
INNER JOIN lc_cat p ON p.id = d.cat_id
WHERE d.tipo = '1'
AND c.dtConcat < '2018-08-05'
AND c.exportado = 'Sim'
GROUP BY prod
) TMP
ORDER BY TMP.qtd_prod DESCCom o seu select ele voltou apenas 1 item e com quantidades incorretas.
Entendo , sem a base fica difícil.
Mas a síntaxe do group e colocá-lo numa linha
Como as " quantidades incorretas" eradas vieram ?
Ele retornou apenas 1 produto e a qtd veio apenas do tipo 0, como poderia te passar as bases?
prod
id_prod
ID
qtd_prod
total_prod
qtd_estoque
TIPOS
24
HJ-111B FILTRO INTERNO 200LH 127V
24
87
1709.40
0
1 0
O problema são os totalizadores , else ficam incompatíveis 9em tese) com o agrupamento em linha
>
Citar
preciso que na mesma linha mostre os 2
use o group_concat