 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
tiagorogers1 Aprendiz


Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 215 Localização: Recife
|
Enviada: Sex Mar 17, 2017 10:12 am Assunto: juncao de 2 querys sql server (Resolvido) |
|
|
tenho o seguinte select | Código: | select E.nf,data,E.codigo,E.estoque_id,E.descricao,G.ncm,E.quantidade,E.unitario,E.total,E.nfvenda_id,F.DATA_nsu from itens_nf_venda e inner JOIN nf_venda f ON f.nfvenda_id = E.nfvenda_id
left join ESTOQUE g on G.ESTOQUE_ID= E.ESTOQUE_ID
where F.data_nsu between '2017-02-01' and '2017-02-28' AND F.Grupo_CFOP='VENDA' AND F.processar='SIM' AND F.IMPRIMIU='SIM' AND F.CANCELADA IS NULL |
e tenho este :
| Código: | SELECT NCM,DESCRICAOMONO,MONOFASICO FROM NCM_MONOFASICOS where Monofasico='sim' and ncm = :pncm8 or ncm = :pncm65 or ncm = :pncm4
|
onde no delphi passava a seguinte condição para o label: | Código: | dm.QueryNCM.SQL.Add('SELECT NCM, DESCRICAOMONO, MONOFASICO FROM NCM_MONOFASICOS');
dm.QueryNCM.SQL.Add('where Monofasico =:status and');
dm.QueryNCM.SQL.Add('( ncm = :pncm8 or ncm = :pncm65 or ncm = :pncm4 )');
dm.QueryNCM.Parameters.ParamByName('status').Value := 'sim';
dm.QueryNCM.Parameters.ParamByName('pncm8').Value := dm.Qrefgeren.fieldbyname('ncm').AsString;
dm.QueryNCM.Parameters.ParamByName('pncm65').Value := LeftStr(dm.Qrefgeren.fieldbyname('ncm').AsString,PosEx('.', dm.Qrefgeren.fieldbyname('ncm').AsString, 6) - 1);
dm.QueryNCM.Parameters.ParamByName('pncm4').Value := LeftStr(dm.Qrefgeren.fieldbyname('ncm').AsString, 4);
dm.QueryNCM.Open;
//se o retorno da pesquisa do ncm retornar vazio ira receber(è isso?)
if dm.QueryNCM.RecordCount = 0 then
Lbncm.Caption:= 'NÃO'
else
Lbncm.Caption:= dm.QueryNCM.fieldbyname('MONOFASICO').AsString;
|
Eu gostaria de unir tudo numa única query , seria possível?
Editado pela última vez por tiagorogers1 em Sex Mar 17, 2017 5:40 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Mar 17, 2017 11:24 am Assunto: |
|
|
Bom dia,
Os parâmetros da segunda query são preenchidos com valores retornados pela primeira query?
Se sim, acredito que a primeira query retorne vários registros, então qual registro deve ser utilizado na segunda query?
Editado pela última vez por imex em Ter Mar 07, 2023 5:39 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
tiagorogers1 Aprendiz


Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 215 Localização: Recife
|
Enviada: Sex Mar 17, 2017 11:53 am Assunto: |
|
|
isso Imex, a primeira Query retorna os sequintes registros:
para a segunda Query validar os ncm , e a ideia é se for monofásico (validar a coluna mofásico da query que já tem o SIM, colocar o sim na nova coluna, se ele não validar, então NAO)
Editado pela última vez por tiagorogers1 em Sex Mar 17, 2017 5:41 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Mar 17, 2017 2:18 pm Assunto: |
|
|
| Confirma uma coisa... você quer adicionar uma coluna para indicar se é monofásico ou não no resultado da primeira query? |
|
| Voltar ao Topo |
|
 |
tiagorogers1 Aprendiz


Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 215 Localização: Recife
|
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Mar 17, 2017 3:15 pm Assunto: |
|
|
Experimente fazer uns testes com a query abaixo para ver se é obtido o resultado esperado:
| Código: | select
E.nf,
data,
E.codigo,
E.estoque_id,
E.descricao,
G.ncm,
E.quantidade,
E.unitario,
E.total,
E.nfvenda_id,
F.DATA_nsu,
o.ncm as ncmmono,
coalesce(o.monofasico, 'NÃO') as monofasico
from itens_nf_venda e
inner JOIN nf_venda f ON f.nfvenda_id = E.nfvenda_id
left join ESTOQUE g on G.ESTOQUE_ID= E.ESTOQUE_ID
outer apply
(
SELECT
NCM,
MONOFASICO
FROM NCM_MONOFASICOS
where
Monofasico = 'sim' and
(ncm = G.ncm or
ncm = left(G.ncm, case when charindex('.', G.ncm, 6) > 0
then charindex('.', G.ncm, 6) - 1
else 0
end) or
ncm = left(G.ncm, 4))
) as o
where
F.data_nsu between '2017-02-01' and '2017-02-28' AND
F.Grupo_CFOP = 'VENDA' AND
F.processar = 'SIM' AND
F.IMPRIMIU = 'SIM' AND
F.CANCELADA IS NULL |
Espero que ajude |
|
| Voltar ao Topo |
|
 |
tiagorogers1 Aprendiz


Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 215 Localização: Recife
|
Enviada: Sex Mar 17, 2017 4:17 pm Assunto: |
|
|
tá 90% IMEX, só um ajuste, como esses da imagem:
esse ncm é monfasico
e na classificação do scritp ele disse que não é . olha ai como ficou :
 |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Mar 17, 2017 5:08 pm Assunto: |
|
|
Então acho que a query inicial também não estava 100%.
Experimente deixar o Outer Apply da seguinte forma:
| Código: | outer apply
(
SELECT
n.NCM,
n.MONOFASICO
FROM NCM_MONOFASICOS as n
where
n.Monofasico = 'sim' and
G.ncm like n.NCM + '%'
) as o |
Espero que ajude |
|
| Voltar ao Topo |
|
 |
tiagorogers1 Aprendiz


Registrado: Sexta-Feira, 17 de Julho de 2015 Mensagens: 215 Localização: Recife
|
Enviada: Sex Mar 17, 2017 5:39 pm Assunto: |
|
|
| Conferido e 100% agora, IMex. Muito Obrigado e um ótimo final de semana |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|