```Array
(
)
```

# subconsultas retornam 2 linhas

Alexandre
- 18 dez 2013

Boa tarde, estou fazendo uma subconsulta mas esta aparecendo o resultado em duas linhas, em outra subconsulta que fiz somando valores deu certo, o resulado desta consulta são dados alfanumericos, o que estou fazendo de errado?
SELECT DISTINCT
TIPO AS TIPO,
DANFE AS DANFE,
DATA_EMISSAO AS DATA_EMISSAO,
DT_LANC_SISTEMA AS DT_LANC_SISTEMA,
FORNECEDOR AS FORNECEDOR,
LOJA AS LOJA,
RAZAO AS RAZAO,
COD_PRODUTO AS COD_PRODUTO,
DESCRICAO AS DESCRICAO,
VALOR_PROD AS VALOR_PROD,
VALOR_DANFE AS VALOR_DANFE,
NATUREZA AS NATUREZA,
DESC_NAT AS DESC_NAT
FROM (
SELECT DISTINCT
D1_TIPO AS TIPO,
F1_DOC AS DANFE,
F1_EMISSAO AS DATA_EMISSAO,
F1_DTDIGIT AS DT_LANC_SISTEMA,
F1_FORNECE AS FORNECEDOR,
F1_LOJA AS LOJA,
A2_NOME AS RAZAO,
D1_COD AS COD_PRODUTO,
B1_DESC AS DESCRICAO,
D1_TOTAL AS VALOR_PROD,
F1_VALBRUT AS VALOR_DANFE,
'' AS NATUREZA,
'' AS DESC_NAT
FROM SD1010 JOIN SF1010 ON D1_DOC = F1_DOC
AND D1_SERIE = F1_SERIE
AND D1_FORNECE = F1_FORNECE
AND D1_LOJA = F1_LOJA

JOIN SB1010 ON B1_FILIAL = ' '
AND B1_COD = D1_COD

JOIN SA2010 ON A2_COD = F1_FORNECE
AND A2_LOJA = F1_LOJA

AND D1_TIPO = 'N'
AND SD1010.D_E_L_E_T_ <>'*'
AND SB1010.D_E_L_E_T_ <>'*'
AND SF1010.D_E_L_E_T_ <>'*'
AND SA2010.D_E_L_E_T_ <>'*'
GROUP BY D1_TIPO,F1_DOC,F1_FORNECE,F1_LOJA,A2_NOME, D1_TIPO,D1_COD, B1_DESC, F1_VALBRUT,F1_EMISSAO,F1_DTDIGIT
, F1_VALMERC,B1_GRUPO, D1_TOTAL
UNION ALL
SELECT DISTINCT
'',
E2_NUM AS DANFE,
'',
'',
E2_FORNECE AS FORNECEDOR,
E2_LOJA AS LOJA,
'',
'',
'',
'',
'',
E2_NATUREZ AS NATUREZA,
ED_DESCRIC AS DESC_NAT
FROM SE2010 INNER JOIN SF1010 ON E2_NUM = F1_DOC
AND E2_FORNECE = F1_FORNECE
AND E2_LOJA = F1_LOJA
INNER JOIN SED010 ON ED_CODIGO = E2_NATUREZ

INNER JOIN SD1010 ON D1_DOC = F1_DOC
AND D1_SERIE = F1_SERIE
AND D1_FORNECE = F1_FORNECE
AND D1_FILIAL = F1_FILIAL

WHERE E2_EMIS1 >= '20131201'
AND E2_EMIS1 <= '20131217'
AND SE2010.D_E_L_E_T_ <> '*'
AND SED010.D_E_L_E_T_ <> '*'
--AND E2_NUM IN ('000005018','000005970')
GROUP BY E2_NUM, E2_FORNECE, E2_LOJA, E2_NATUREZ, ED_DESCRIC

) AS A INNER JOIN SA2010 ON A.FORNECEDOR = A2_COD
AND A.LOJA = A2_LOJA
--) AS A INNER JOIN SB1010 ON A.COD_PRODUTO = B1_COD
GROUP BY A.DANFE,A.TIPO,A.DATA_EMISSAO,A.DT_LANC_SISTEMA, A.FORNECEDOR,A.LOJA,A.RAZAO,
A.COD_PRODUTO,A.DESCRICAO, A.VALOR_DANFE, A.VALOR_PROD, A.NATUREZA, A.DESC_NAT
TIPO DANFE FORNECEDOR LOJA RAZAO COD_PRODUTO DESCRICAO VALOR_PROD VALOR_DANFE NATUREZA
3 1910 1 0 0 10.101.09
N 3 1910 1 FLAVIA 300082 CONFECCAO 640 640

Alexandre
- 18 dez 2013

como

|

Isaac Jose
- 18 dez 2013

deve estar faltando algo no group by pois esta trazendo informações diferentes nas colunas ora traz em branco e na linha de baixo traz informação.
tente colocar o max nesses campos ai ele ira trazer somente o max de cada coluna.....

|

Cléverson Specht
|
MVP
Pontos: 800
19 dez 2013

Boa tarde,

Pelo que analisei está duplicando as linhas pelo retorno desse select:

#Código

``````SELECT DISTINCT
'',
E2_NUM AS DANFE,
'',
'',
E2_FORNECE AS FORNECEDOR,
E2_LOJA AS LOJA,
'',
'',
'',
'',
'',
E2_NATUREZ AS NATUREZA,
ED_DESCRIC AS DESC_NAT
FROM SE2010 ...``````

Alterei a query para que traga o max e o sum de alguns campos corrigindo os campos vazios retornados:

#Código
``````SELECT DISTINCT
MAX(TIPO)             AS TIPO,
DANFE                 AS DANFE,
MAX(DATA_EMISSAO)     AS DATA_EMISSAO,
MAX(DT_LANC_SISTEMA)  AS DT_LANC_SISTEMA,
FORNECEDOR            AS FORNECEDOR,
LOJA                  AS LOJA,
MAX(RAZAO)            AS RAZAO,
MAX(COD_PRODUTO)      AS COD_PRODUTO,
MAX(DESCRICAO)        AS DESCRICAO,
SUM(VALOR_PROD)       AS VALOR_PROD,
SUM(VALOR_DANFE)      AS VALOR_DANFE,
MAX(NATUREZA)         AS NATUREZA,
MAX(DESC_NAT)         AS DESC_NAT
FROM (SELECT DISTINCT
D1_TIPO       AS TIPO,
F1_DOC        AS DANFE,
F1_EMISSAO    AS DATA_EMISSAO,
F1_DTDIGIT    AS DT_LANC_SISTEMA,
F1_FORNECE    AS FORNECEDOR,
F1_LOJA       AS LOJA,
A2_NOME       AS RAZAO,
D1_COD        AS COD_PRODUTO,
B1_DESC       AS DESCRICAO,
D1_TOTAL      AS VALOR_PROD,
F1_VALBRUT    AS VALOR_DANFE,
''            AS NATUREZA,
''            AS DESC_NAT
FROM SD1010
JOIN SF1010 ON	D1_DOC = F1_DOC
AND D1_SERIE = F1_SERIE
AND	D1_FORNECE = F1_FORNECE
AND	D1_LOJA = F1_LOJA
JOIN SB1010 ON	B1_FILIAL = ' '
AND B1_COD = D1_COD
JOIN SA2010 ON	A2_COD = F1_FORNECE
AND A2_LOJA = F1_LOJA
WHERE D1_DTDIGIT >= '20131201'
AND D1_DTDIGIT <= '20131217'
AND D1_TIPO = 'N'
AND SD1010.D_E_L_E_T_ <> '*'
AND SB1010.D_E_L_E_T_ <> '*'
AND SF1010.D_E_L_E_T_ <> '*'
AND SA2010.D_E_L_E_T_ <> '*'
GROUP
BY D1_TIPO
, F1_DOC
, F1_FORNECE
, F1_LOJA
, A2_NOME
, D1_TIPO
, D1_COD
, B1_DESC
, F1_VALBRUT
, F1_EMISSAO
, F1_DTDIGIT
, F1_VALMERC
, B1_GRUPO
, D1_TOTAL
UNION ALL
SELECT DISTINCT
'',
E2_NUM AS DANFE,
'',
'',
E2_FORNECE AS FORNECEDOR,
E2_LOJA AS LOJA,
'',
'',
'',
'',
'',
E2_NATUREZ AS NATUREZA,
ED_DESCRIC AS DESC_NAT
FROM SE2010
INNER JOIN SF1010 ON	E2_NUM = F1_DOC
AND E2_FORNECE = F1_FORNECE
AND E2_LOJA = F1_LOJA
INNER JOIN SED010 ON	ED_CODIGO = E2_NATUREZ
INNER JOIN SD1010 ON	D1_DOC = F1_DOC
AND	D1_SERIE = F1_SERIE
AND D1_FORNECE = F1_FORNECE
AND D1_FILIAL = F1_FILIAL
WHERE E2_EMIS1 >= '20131201'
AND E2_EMIS1 <= '20131217'
AND SE2010.D_E_L_E_T_ <> '*'
AND SED010.D_E_L_E_T_ <> '*'
GROUP
BY E2_NUM
, E2_FORNECE
, E2_LOJA
, E2_NATUREZ
, ED_DESCRIC) AS A
INNER JOIN SA2010 ON A.FORNECEDOR = A2_COD
AND A.LOJA = A2_LOJA
GROUP
BY
DANFE                 ,
FORNECEDOR            ,
LOJA``````

|

Alexandre
- 19 dez 2013

Boa tarde Cléverson, a correção que fez resolveu 50% dos meus problemas, a finalidade desta consulta é relacionar todas as Danfes com seus respectivos itens e as Naturezas Financeiras ( que fica em outra tabela==> SED010 ), e isto deu certo, as Danfes que tem as Naturezas aparecem e as que não tem ficam em branco ótimo, o problema são as Danfes com mais de um item, com o MAX ele relaciona somente o produto com o maior código. Mas obrigado a partir de sua correção vou continuar as tentativas.

Grato

|