subconsultas retornam 2 linhas

18/12/2013

0

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


WHERE D1_DTDIGIT >= '20131201'--RIGHT(Convert(varchar,:DataDe),4)+SUBSTRING(Convert(varchar,:DataDe),3,2)+LEFT(Convert(varchar,:DataDe),2)
AND D1_DTDIGIT <= '20131217'--RIGHT(Convert(varchar,:DataDe),4)+SUBSTRING(Convert(varchar,:DataDe),3,2)+LEFT(Convert(varchar,:DataDe),2)
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

Segue abaixo o resultado de um exemplo do resultado da consulta

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



Desde já obrigado
Alexandre

Alexandre

Responder

Posts

18/12/2013

Alexandre

[img]http://arquivo.devmedia.com.br/forum/imagem/353395-20131218-173540.jpg[/img]como
Responder

18/12/2013

Isaac Jose

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.....
Responder

19/12/2013

Cléverson Specht

Boa tarde,

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

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:

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                  
Responder

19/12/2013

Alexandre

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
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar