colunas com subquery SQL
11/12/2023
0
select YEAR (t.data) 'ANO', MONTH(T.DATA) 'MÊS', o.CODVEND1 'CODIGO VENDEDOR', v.VENDEDOR 'NOME VENDEDOR', p.CODGRUP 'GRUPO PRODUTO', g.DESCRICAO 'DESCRICAO GRUPO', o.CODPROD 'CODIGO PRODUTO', p.DESCPROD 'DESCRICAO PRODUTO', p.CODUNID 'CODIGO UNIDADE', u.DESCRICAO 'DESCRICAO UNIDADE', o.QTDADE 'QUANTIDADE', t.CODCLIFOR 'CODIGO CLIENTE', c.NOME 'NOME CLIENTE', t.CODTRANSACAO 'CODIGO TRANSACAO', t.NOTA 'NF-E', o.CODNATU 'CFOP', ( SELECT i.CONTA FROM INTCONTABIL i WHERE i.CODGRUP = p.CODGRUP and i.VARIAVEL='GRC' ) as CONTA, case when o.CODNATU in ('1201','2201') then ROUND (s.CUSTOMEDIO * o.QTDADE,2 ) * -1 else ROUND (s.CUSTOMEDIO * o.QTDADE,2 ) end 'VALOR CPV' from ORDTRANS O inner join TRANSACAO T on o.codtransacao=t.codtransacao inner join PRODUTO P on o.codprod=p.CODPROD inner join UNIDADE U on u.CODUNID=p.CODUNID inner join CLIFOR C on c.CODCLIFOR=t.CODCLIFOR inner join ORDSALDO S on s.CODORDTRANS=o.CODORDTRANS INNER JOIN GRUPPROD G on g.CODGRUP=p.CODGRUP left join V_VENDEDOR V on v.CODVEND1=o.CODVEND1 where t.DATA between '01/01/2023' and '30/11/2023' AND t.SITUACAO=3 AND o.CODNATU in ('1201', '2201','5101', '5101A', '5101C', '5101P', '5102', '5116', '5124', '5125','6116', '6101P') order by t.NOTA
Nessa parte, está trazendo o código da conta que foi realizado o lançamento da despesa:
( SELECT i.CONTA FROM INTCONTABIL i WHERE i.CODGRUP = p.CODGRUP and i.VARIAVEL='GRC' ) as CONTA,
Preciso pegar esse resultado (codigo da conta), e unir com a tabela CONTAS para trazer a descrição dessa conta, alguma dica de como posso fazer ?
Mylena
Post mais votado
11/12/2023
select YEAR (t.data) 'ANO', MONTH(T.DATA) 'MÊS', o.CODVEND1 'CODIGO VENDEDOR', v.VENDEDOR 'NOME VENDEDOR', p.CODGRUP 'GRUPO PRODUTO', g.DESCRICAO 'DESCRICAO GRUPO', o.CODPROD 'CODIGO PRODUTO', p.DESCPROD 'DESCRICAO PRODUTO', p.CODUNID 'CODIGO UNIDADE', u.DESCRICAO 'DESCRICAO UNIDADE', o.QTDADE 'QUANTIDADE', t.CODCLIFOR 'CODIGO CLIENTE', c.NOME 'NOME CLIENTE', t.CODTRANSACAO 'CODIGO TRANSACAO', t.NOTA 'NF-E', o.CODNATU 'CFOP', cta.DESCRICAO 'DESCRICAO CONTA', case when o.CODNATU in ('1201','2201') then ROUND (s.CUSTOMEDIO * o.QTDADE,2 ) * -1 else ROUND (s.CUSTOMEDIO * o.QTDADE,2 ) end 'VALOR CPV' from ORDTRANS O inner join TRANSACAO T on o.codtransacao=t.codtransacao inner join PRODUTO P on o.codprod=p.CODPROD inner join UNIDADE U on u.CODUNID=p.CODUNID inner join CLIFOR C on c.CODCLIFOR=t.CODCLIFOR inner join ORDSALDO S on s.CODORDTRANS=o.CODORDTRANS INNER JOIN GRUPPROD G on g.CODGRUP=p.CODGRUP left join V_VENDEDOR V on v.CODVEND1=o.CODVEND1 left join INTCONTABIL i on i.CODGRUP = p.CODGRUP and i.VARIAVEL='GRC' left join CONTAS CTA on CTA.CODIGO = i.CONTA -- aqui você faz o relacionamento com a tabela de contas where t.DATA between '01/01/2023' and '30/11/2023' AND t.SITUACAO=3 AND o.CODNATU in ('1201', '2201','5101', '5101A', '5101C', '5101P', '5102', '5116', '5124', '5125','6116', '6101P') order by t.NOTA
Emerson Nascimento
Mais Posts
11/12/2023
Arthur Heinrich
Partindo do pressuposto que esse subselect sempre retorna o número da conta e sempre retorna apenas 1 valor, já que do contrário daria erro na execução da query, você deve colocar a tabela no from:
select YEAR (t.data) 'ANO', MONTH(T.DATA) 'MÊS', o.CODVEND1 'CODIGO VENDEDOR', v.VENDEDOR 'NOME VENDEDOR', p.CODGRUP 'GRUPO PRODUTO', g.DESCRICAO 'DESCRICAO GRUPO', o.CODPROD 'CODIGO PRODUTO', p.DESCPROD 'DESCRICAO PRODUTO', p.CODUNID 'CODIGO UNIDADE', u.DESCRICAO 'DESCRICAO UNIDADE', o.QTDADE 'QUANTIDADE', t.CODCLIFOR 'CODIGO CLIENTE', c.NOME 'NOME CLIENTE', t.CODTRANSACAO 'CODIGO TRANSACAO', t.NOTA 'NF-E', o.CODNATU 'CFOP', i.CONTA, i.DESCRICAO_CONTA, case when o.CODNATU in ('1201','2201') then ROUND (s.CUSTOMEDIO * o.QTDADE,2 ) * -1 else ROUND (s.CUSTOMEDIO * o.QTDADE,2 ) end 'VALOR CPV' from ORDTRANS O inner join TRANSACAO T on o.codtransacao=t.codtransacao inner join PRODUTO P on o.codprod=p.CODPROD inner join UNIDADE U on u.CODUNID=p.CODUNID inner join CLIFOR C on c.CODCLIFOR=t.CODCLIFOR inner join ORDSALDO S on s.CODORDTRANS=o.CODORDTRANS INNER JOIN GRUPPROD G on g.CODGRUP=p.CODGRUP left join V_VENDEDOR V on v.CODVEND1=o.CODVEND1 inner join INTCONTABIL i on i.CODGRUP = p.CODGRUP and i.VARIAVEL='GRC' where t.DATA between '01/01/2023' and '30/11/2023' AND t.SITUACAO=3 AND o.CODNATU in ('1201', '2201','5101', '5101A', '5101C', '5101P', '5102', '5116', '5124', '5125','6116', '6101P') order by t.NOTA
Caso a conta não seja retornada sempre, para não eliminar a linha do resultado e simplesmente retornar NULL nas colunas CONTA e DESCRIÇÃO, altere o "inner join" para "left join".
11/12/2023
Mylena
Exemplo nas contas que retornaram da subquery:
NF-E | CFOP | CONTA | DESCRICAO
1050 | 5101P | 40101020025 | NULL
1050 | 5101P | 40101020015 | NULL
1050 | 5101P | 40101020025 | NULL
1050 | 5101P | 40101020015 | NULL
1050 | 5101P | 40101020025 | NULL
De acordo com cada Conta que retornou preciso unir com a tabela CONTAS para conseguir buscar a descrição da conta.
Exemplo da tabela conta:
CODCONTA | CODBANCO |DESCRICAO
40101020015 | NULL | CPV AVES
40101020016 | NULL | CPV SUINOS
40101020017 | NULL | CPV EQUINOS
40101020018 | NULL | CPV PREMIX
40101020019 | NULL | CPV SM MISTURA
40101020020 | NULL | CPV SM PRONTO USO
40101020021 | NULL | CPV SM PROTEICO
40101020022 | NULL | CPV SM COM UREIA
40101020023 | NULL | CPV NUCLEO
40101020024 | NULL | CPV CONCENTRADO
40101020025 | NULL | CPV ESPECIALIDADES
Resultado esperado:
NF-E | CFOP | CONTA | DESCRICAO
1050 | 5101P | 40101020025 | CPV ESPECIALIDADES
1050 | 5101P | 40101020015 | CPV AVES
1050 | 5101P | 40101020025 | CPV ESPECIALIDADES
1050 | 5101P | 40101020015 | CPV AVES
1050 | 5101P | 40101020025 | CPV ESPECIALIDADES
11/12/2023
Mylena
select YEAR (t.data) 'ANO', MONTH(T.DATA) 'MÊS', o.CODVEND1 'CODIGO VENDEDOR', v.VENDEDOR 'NOME VENDEDOR', p.CODGRUP 'GRUPO PRODUTO', g.DESCRICAO 'DESCRICAO GRUPO', o.CODPROD 'CODIGO PRODUTO', p.DESCPROD 'DESCRICAO PRODUTO', p.CODUNID 'CODIGO UNIDADE', u.DESCRICAO 'DESCRICAO UNIDADE', o.QTDADE 'QUANTIDADE', t.CODCLIFOR 'CODIGO CLIENTE', c.NOME 'NOME CLIENTE', t.CODTRANSACAO 'CODIGO TRANSACAO', t.NOTA 'NF-E', o.CODNATU 'CFOP', i.CONTA, CTA.DESCRICAO, case when o.CODNATU in ('1201','2201') then ROUND (s.CUSTOMEDIO * o.QTDADE,2 ) * -1 else ROUND (s.CUSTOMEDIO * o.QTDADE,2 ) end 'VALOR CPV' from ORDTRANS O inner join TRANSACAO T on o.codtransacao=t.codtransacao inner join PRODUTO P on o.codprod=p.CODPROD inner join UNIDADE U on u.CODUNID=p.CODUNID inner join CLIFOR C on c.CODCLIFOR=t.CODCLIFOR inner join ORDSALDO S on s.CODORDTRANS=o.CODORDTRANS INNER JOIN GRUPPROD G on g.CODGRUP=p.CODGRUP left join V_VENDEDOR V on v.CODVEND1=o.CODVEND1 left join INTCONTABIL i on i.CODGRUP = p.CODGRUP and i.VARIAVEL='GRC' left join CONTA CTA on CTA.CONTA = i.CONTA -- aqui você faz o relacionamento com a tabela de contas where t.DATA between '01/01/2023' and '30/11/2023' AND t.SITUACAO=3 AND o.CODNATU in ('1201', '2201','5101', '5101A', '5101C', '5101P', '5102', '5116', '5124', '5125','6116', '6101P') order by t.NOTA
13/12/2023
Emerson Nascimento
Mylena, não conheço a modelagem do teu banco de dados, logo não sei como fazer o relacionamento entre as tabelas.
o trecho com o relacionamento é uma sugestão
left join CONTA CTA on CTA.CONTA = i.CONTA -- aqui você faz o relacionamento com a tabela de contas
13/12/2023
Mylena
Clique aqui para fazer login e interagir na Comunidade :)