×
Linguagem de Programação ADVPL
Perguntas duvida SQL
- nagasako
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 11
- Obrigados Recebidos: 0
10 anos 5 dias atrás #26637
por nagasako
duvida SQL foi criado por nagasako
pessoal
estou precisando montar um relatorio em advpl mas to batendo cabeça na query. preciso listar os produtos conforme query A, independente de ter ocorrido venda de um determinado produto (query , preciso que liste todos os produtos resultado da query A, mesmo que o resultado em B seja zerado ou null. Tentei usar o left outer join, mas esta retornando resultado da seguinte forma(query C):
pra cada registro da query A, o valor total geral e o campo F2_VEND1 vem nulo.
nos casos em que o F2_VEND1 vem preenchido, só lista os produtos que houveram vendas. Alguem tem ideia de como devo fazer??
Query A
select B1_COD, B1_DESC, B1_ZZPREV
from SB1010 SB1
where SB1.D_E_L_E_T_ = ''
and SB1.B1_ZZPREV = 'S'
Query B
select D2_COD,SUM(D2_QUANT) AS QTDE, SUM(D2_TOTAL) AS VLRTOTAL, F2_VEND1 AS RTV
from SD2010 SD2, SF2010 SF2
where SD2.D_E_L_E_T_ = ''
and SF2.D_E_L_E_T_ = ''
and SF2.F2_FILIAL = SD2.D2_FILIAL
and SF2.F2_DOC = SD2.D2_DOC
and SF2.F2_SERIE = SD2.D2_SERIE
and YEAR(SD2.D2_EMISSAO) = 2014
and F2_VEND1 = 'RTV002'
group by D2_COD,F2_VEND1
order by D2_COD
Query C
select A.B1_COD,A.B1_DESC,SUM(D2_TOTAL) AS VLRTOT, F2_VEND1
from SB1010 A
left outer join SD2010 B ON A.B1_COD =SUBSTRING(B.D2_COD,1,9) and A.D_E_L_E_T_ = '' and B.D_E_L_E_T_ = '' and B.D2_TIPO = 'N'
left outer join SF2010 C ON C.F2_FILIAL = A.B1_FILIAL AND B.D2_FILIAL = C.F2_FILIAL and B.D2_DOC = C.F2_DOC and B.D2_SERIE = C.F2_SERIE and C.D_E_L_E_T_ = '' and C.F2_VEND1 = 'RTV002' AND YEAR(C.F2_EMISSAO)=2014
where SUBSTRING(A.B1_COD,1,3) = 'OXI' and A.B1_FILIAL = '01' and A.B1_ZZPREV = 'S'
group by A.B1_COD,A.B1_DESC, F2_VEND1
order by F2_VEND1,A.B1_COD
estou precisando montar um relatorio em advpl mas to batendo cabeça na query. preciso listar os produtos conforme query A, independente de ter ocorrido venda de um determinado produto (query , preciso que liste todos os produtos resultado da query A, mesmo que o resultado em B seja zerado ou null. Tentei usar o left outer join, mas esta retornando resultado da seguinte forma(query C):
pra cada registro da query A, o valor total geral e o campo F2_VEND1 vem nulo.
nos casos em que o F2_VEND1 vem preenchido, só lista os produtos que houveram vendas. Alguem tem ideia de como devo fazer??
Query A
select B1_COD, B1_DESC, B1_ZZPREV
from SB1010 SB1
where SB1.D_E_L_E_T_ = ''
and SB1.B1_ZZPREV = 'S'
Query B
select D2_COD,SUM(D2_QUANT) AS QTDE, SUM(D2_TOTAL) AS VLRTOTAL, F2_VEND1 AS RTV
from SD2010 SD2, SF2010 SF2
where SD2.D_E_L_E_T_ = ''
and SF2.D_E_L_E_T_ = ''
and SF2.F2_FILIAL = SD2.D2_FILIAL
and SF2.F2_DOC = SD2.D2_DOC
and SF2.F2_SERIE = SD2.D2_SERIE
and YEAR(SD2.D2_EMISSAO) = 2014
and F2_VEND1 = 'RTV002'
group by D2_COD,F2_VEND1
order by D2_COD
Query C
select A.B1_COD,A.B1_DESC,SUM(D2_TOTAL) AS VLRTOT, F2_VEND1
from SB1010 A
left outer join SD2010 B ON A.B1_COD =SUBSTRING(B.D2_COD,1,9) and A.D_E_L_E_T_ = '' and B.D_E_L_E_T_ = '' and B.D2_TIPO = 'N'
left outer join SF2010 C ON C.F2_FILIAL = A.B1_FILIAL AND B.D2_FILIAL = C.F2_FILIAL and B.D2_DOC = C.F2_DOC and B.D2_SERIE = C.F2_SERIE and C.D_E_L_E_T_ = '' and C.F2_VEND1 = 'RTV002' AND YEAR(C.F2_EMISSAO)=2014
where SUBSTRING(A.B1_COD,1,3) = 'OXI' and A.B1_FILIAL = '01' and A.B1_ZZPREV = 'S'
group by A.B1_COD,A.B1_DESC, F2_VEND1
order by F2_VEND1,A.B1_COD
Por favor Acessar ou Registrar para participar da conversa.
- lalberto
- Desconectado
- Administrador
Menos
Mais
- Postagens: 3676
- Obrigados Recebidos: 6
10 anos 5 dias atrás #26638
por lalberto
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Respondido por lalberto no tópico duvida SQL
select F2_VEND1,A.B1_COD,A.B1_DESC, SUM(ISNULL(D2_TOTAL,0)) AS VLRTOT
from SB1010 A
left join SD2010 B ON A.B1_COD =B.D2_COD and B.D_E_L_E_T_ = '' and B.D2_TIPO = 'N'
left join SF2010 C ON C.F2_FILIAL = A.B1_FILIAL AND B.D2_FILIAL = C.F2_FILIAL and B.D2_DOC = C.F2_DOC and B.D2_SERIE = C.F2_SERIE and C.D_E_L_E_T_ = '' and C.F2_VEND1 = 'RTV002' AND LEFT(C.F2_EMISSAO,4)='2014'
where SUBSTRING(A.B1_COD,1,3) = 'OXI' and A.B1_FILIAL = '01' and A.B1_ZZPREV = 'S'
group by F2_VEND1, A.B1_COD,A.B1_DESC
order by F2_VEND1,A.B1_COD
from SB1010 A
left join SD2010 B ON A.B1_COD =B.D2_COD and B.D_E_L_E_T_ = '' and B.D2_TIPO = 'N'
left join SF2010 C ON C.F2_FILIAL = A.B1_FILIAL AND B.D2_FILIAL = C.F2_FILIAL and B.D2_DOC = C.F2_DOC and B.D2_SERIE = C.F2_SERIE and C.D_E_L_E_T_ = '' and C.F2_VEND1 = 'RTV002' AND LEFT(C.F2_EMISSAO,4)='2014'
where SUBSTRING(A.B1_COD,1,3) = 'OXI' and A.B1_FILIAL = '01' and A.B1_ZZPREV = 'S'
group by F2_VEND1, A.B1_COD,A.B1_DESC
order by F2_VEND1,A.B1_COD
Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Por favor Acessar ou Registrar para participar da conversa.
Tempo para a criação da página:0.114 segundos