× Linguagem de Programação ADVPL

Perguntas Query usando 3 tabelas

Mais
11 anos 7 meses atrás - 11 anos 7 meses atrás #12669 por Idalicio
Respondido por Idalicio no tópico Query usando 3 tabelas
Não adiantou..ele trouxe várias vezes determinados clientes que compraram mais de uma vez ao invés de agrupar.

Tanto no SD2000 como na SZA000 um cliente pode ter vários registros pois fez várias compras. Mas se ele achou o cliente várias vezes no SD2000 e na SZA000 eu preciso que ele conte como apenas um registro.

Idalício.
Ultima edição: 11 anos 7 meses atrás por Idalicio. Razão: Acrescentei um comentário.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 7 meses atrás #12673 por kanaamlrr
Respondido por kanaamlrr no tópico Query usando 3 tabelas
SELECT * FROM
(SELECT D2_FILIAL AS FILIAL, D2_EMISSAO AS EMISSAO, D2_LOJA AS LOJA, D2_DOC AS DOC, D2_SERIE AS SERIE, D2_CLIENTE AS CLIENTE, D2_TES AS TES
FROM SD2000 INNER JOIN SA1000
ON D2_CLIENTE = A1_COD AND D2_LOJA = A1_LOJA
WHERE
(D2_TES = '501' OR D2_TES = '502') AND
A1_DTCADAS BETWEEN 20110101 AND 20130131 GROUP BY D2_CLIENTE
UNION ALL
SELECT ZA_FILIAL AS FILIAL, ZA_EMISSAO AS EMISSAO, ZA_LOJA AS LOJA, ZA_DOC AS DOC, ZA_SERIE AS SERIE, ZA_CLIENTE AS CLIENTE, ZA_TES AS TES
FROM SZA000 INNER JOIN SA1000
ON ZA_CLIENTE = A1_COD AND ZA_LOJA = A1_LOJA
WHERE
(ZA_TES = '501' OR ZA_TES = '502') AND
A1_DTCADAS BETWEEN 20110101 AND 20130131 GROUP BY D2_CLIENTE) AS Q
GROUP BY CLIENTE, LOJA, FILIAL, EMISSAO, DOC, SERIE, TES

tenta assim
Não sei se entendi certo o que você precisa.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 7 meses atrás #12687 por Idalicio
Respondido por Idalicio no tópico Query usando 3 tabelas
Essa query nem executou pois deu erro.

A query que executou certo porém não agrupa por cliente é esta abaixo. Eu só preciso que se ela achar e compras do cliente na SD2000 e mais duas na SAZ000 ele me traga somente o 1 registro para eu saber que o cliente comprou naquele período.

Por mim não precisa listar por nota como esta aconcendo. Exemplo. Se tiver 5 cliente e todos fizeram 5 compras que consta das duas tabelas ele teria de me trazer 5 registros e não 25 registros.

Só agrupar por cliente o que não esta acontecendo.


SELECT * FROM
(SELECT DISTINCT D2_FILIAL AS FILIAL, D2_EMISSAO AS EMISSAO, D2_LOJA AS LOJA, D2_DOC AS DOC, D2_SERIE AS SERIE, D2_CLIENTE AS CLIENTE, D2_TES AS TES
FROM SD2000 INNER JOIN SA1000 ON D2_CLIENTE = A1_COD AND D2_LOJA = A1_LOJA WHERE (D2_TES = '501' OR D2_TES = '502') AND
A1_DTCADAS BETWEEN '19800101' AND '20130408'
UNION ALL
SELECT DISTINCT ZA_FILIAL AS FILIAL, ZA_EMISSAO AS EMISSAO, ZA_LOJA AS LOJA, ZA_DOC AS DOC, ZA_SERIE AS SERIE, ZA_CLIENTE AS CLIENTE, ZA_TES AS TES
FROM SZA000 INNER JOIN SA1000
ON ZA_CLIENTE = A1_COD AND ZA_LOJA = A1_LOJA
WHERE (ZA_TES = '501' OR ZA_TES = '502') AND A1_DTCADAS BETWEEN '19800101' AND '20130408'
AND NOT EXISTS(SELECT 'Z' FROM SD2000 D2 INNER JOIN SA1000 A1 ON D2.D2_CLIENTE = A1.A1_COD AND D2.D2_LOJA = A1.A1_LOJA
WHERE (D2.D2_TES = '501' OR D2.D2_TES = '502') AND
A1.A1_DTCADAS BETWEEN '19800101' AND '20130408' AND ZA_DOC = D2.D2_DOC)) AS Q
GROUP BY FILIAL, EMISSAO, LOJA, DOC, SERIE, CLIENTE, TES

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 7 meses atrás #12695 por kanaamlrr
Respondido por kanaamlrr no tópico Query usando 3 tabelas
tenta mudar a ordem do seu group by final

DE

GROUP BY FILIAL, EMISSAO, LOJA, DOC, SERIE, CLIENTE, TES

POR

GROUP BY CLIENTE, LOJA, FILIAL, EMISSAO, DOC, SERIE, TES

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 7 meses atrás #12698 por Idalicio
Respondido por Idalicio no tópico Query usando 3 tabelas
Mesmo mudando a ordem como você pediu trás a mesma coisa.

04 20110128 01 006438 04U 150273 501
04 20111028 01 006901 04U 163739 501
04 20111107 01 006915 04U 163739 501
04 20111114 01 006926 04U 163860 501
04 20111121 01 006934 04U 169332 501
04 20111121 01 006940 04U 132297 501
04 20111121 01 006942 04U 162782 501
04 20111121 01 006946 04U 169337 501
04 20111205 01 006974 04U 159206 501
04 20111212 01 006986 04U 167629 501

Esta vendo ali acima
04 20111028 01 006901 04U 163739 501
04 20111107 01 006915 04U 163739 501

É a mesma nota com itens diferentes. Devia agupar o cliente.
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 7 meses atrás #12699 por kanaamlrr
Respondido por kanaamlrr no tópico Query usando 3 tabelas
Cara, isso acontece porque a função GROUP BY agrupa os itens semelhantes que estão definidos em sua declaração

Como eles tem algum dos elementos diferente, ele considera como 2 registros.

Se você trouxer no seu select da seguinte forma:

SELECT CLIENTE, LOJA FROM
(SELECT DISTINCT D2_FILIAL AS FILIAL, D2_EMISSAO AS EMISSAO, D2_LOJA AS LOJA, D2_DOC AS DOC, D2_SERIE AS SERIE, D2_CLIENTE AS CLIENTE, D2_TES AS TES
FROM SD2000 INNER JOIN SA1000 ON D2_CLIENTE = A1_COD AND D2_LOJA = A1_LOJA WHERE (D2_TES = '501' OR D2_TES = '502') AND
A1_DTCADAS BETWEEN '19800101' AND '20130408'
UNION ALL
SELECT DISTINCT ZA_FILIAL AS FILIAL, ZA_EMISSAO AS EMISSAO, ZA_LOJA AS LOJA, ZA_DOC AS DOC, ZA_SERIE AS SERIE, ZA_CLIENTE AS CLIENTE, ZA_TES AS TES
FROM SZA000 INNER JOIN SA1000
ON ZA_CLIENTE = A1_COD AND ZA_LOJA = A1_LOJA
WHERE (ZA_TES = '501' OR ZA_TES = '502') AND A1_DTCADAS BETWEEN '19800101' AND '20130408'
AND NOT EXISTS(SELECT 'Z' FROM SD2000 D2 INNER JOIN SA1000 A1 ON D2.D2_CLIENTE = A1.A1_COD AND D2.D2_LOJA = A1.A1_LOJA
WHERE (D2.D2_TES = '501' OR D2.D2_TES = '502') AND
A1.A1_DTCADAS BETWEEN '19800101' AND '20130408' AND ZA_DOC = D2.D2_DOC)) AS Q
GROUP BY CLIENTE, LOJA

ele vai retornar o seu resultado esperado.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.100 segundos
Joomla templates by a4joomla