Jump to content
Fivewin Brasil

Instrução em SQL


Luiz Fernando

Recommended Posts

Colegas ve se alguém poderia me ajudar nisto

este exemplo de select funciona normal

cSql:="SELECT pe.vendedor,pe.produto,pe.volume,pe.qtd,pe.valor,p.descricao,e.qtd,p.volume,pe.pedido,pe.grupo"
cSql+=",gr.nome,p.compo_imp"
cSql+=" FROM pedido as pe"
cSql+=" LEFT JOIN produto as p on pe.produto = p.codigo"
cSql+=" LEFT JOIN grupo as gr on p.grupo = gr.codigo"
cSql+=" LEFT JOIN (SELECT * from estoque WHERE codigo ='"+aTermi[1,1]+"') as e on pe.produto = e.produto"     

neste outro select eu tb preciso usar a sexta linha do select acima mais não da certo

cSql="SELECT pe.produto,pr.descricao,sum(pe.qtd)"
cSql+=" from pedido as pe, produto as pr, vendas as ve"
cSql+=" LEFT JOIN (SELECT * from estoque WHERE codigo ='"+cGet[4]+"') as e on pe.produto = e.produto"
cSql+=" WHERE pe.produto = pr.codigo AND pe.pedido = ve.pedido"

a unica diferente que que no from tenho varias tabela, sera que qdo usa este processo não da certo usar tb um left join junto

Obrigado

Link to comment
Share on other sites

Luiz tudo bem!

Nunca vi um FROM assim?

Achei estranho também tem um SUM(), mas não tem GROUP BY.

//-> Eu uso bastante e fica assim, esse é apenas um exemplo:

SELECT a.produto,
b.descricao,
SUM(c.qtde) AS qtde

FROM tab1 AS a
LEFT JOIN tab2 AS b ON a.chaves = b.chave
LEFT JOIN tab3 AS c ON a.chave = c.chave

LEFT JOIN // ou INNER JOIN

// select interno
( SELECT chave,codigo,campo3
FROM tab4
WHERE codigo = '"+cGet[4]+"' ) res // esse res seria o resultado do select interno

ON tab1.chave = res.chave // chave da tabela 1 = chave do select interno

WHERE ???? // se tiver uma segunda condição coloca aqui pode usar da tab1, tab2, tab3 ou do res

GROUP BY a.produto // se tem uma soma tem que ter um group by

ORDER BY ??? // se for o caso

//-> Esse é um SELECT em produção e tem praticamente a mesma lógica, no caso em SQL Server no php, mas a lógica é a mesma.

SELECT EXT.id_grupo_empresa,
EMP.nome_contrato,
EXT.nome,
EXT.titulo_servico,
RES.es,
RES.at,
FUN.telefone
FROM GCORE..TAB_DADOS_ACQ_EXT EXT
INNER JOIN GCORE_CAD_EMPRESAS_AREAS..cad_func FUN
ON EXT.re_fisc = FUN.re_fisc
INNER JOIN GCORE_CAD_EMPRESAS_AREAS..cad_empresa_contrato EMP
ON EXT.id_empresa_contrato = EMP.id_empresa_contrato
INNER JOIN
(SELECT AMO.acq,AMO.es,AMO.at
FROM GCORE..TAB_DADOS_AMOSTRAS_1 AMO
UNION ALL
SELECT BDLP.acq,BDLP.es,BDLP.at
FROM GCORE..TAB_DADOS_AMOSTRAS_BD_LP BDLP
UNION ALL
SELECT DDR.acq,DDR.es,DDR.at
FROM GCORE..TAB_DADOS_AMOSTRAS_DDR DDR
UNION ALL
SELECT PZ.acq,PZ.es,PZ.at
FROM GCORE..TAB_DADOS_AMOSTRAS_PZ PZ
UNION ALL
SELECT LIMP.acq,LIMP.es,LIMP.at
FROM GCORE..TAB_DADOS_AMOSTRAS_TUP_LIMP LIMP ) RES
ON EXT.acq = RES.acq
WHERE Convert(CHAR(10),EXT.data_fisc,103) = '$data'
AND EXT.id_prod NOT IN (38,40)
AND EXT.re_fisc NOT IN (1063880,50009,50152,340540)
AND EXT.titulo_servico <> 'ESP ADSL AUTOINS'
AND EXT.status NOT IN(8)
AND EXT.titulo_servico NOT like '%REINSPEÇÃO%'
GROUP BY EXT.id_grupo_empresa,
EMP.nome_contrato,
EXT.nome,
RES.es,
RES.at,
EXT.titulo_servico,
FUN.telefone
ORDER BY EXT.id_grupo_empresa,
EMP.nome_contrato,
EXT.nome,
RES.es,
RES.at,
EXT.titulo_servico ;

Espero ter ajudado.

Sds,

Link to comment
Share on other sites

Ola Geraldo vlw pelos exemplos vou analisar eles aqui com calma, sobre a forma de usar o from acima foi os amigo aqui do forum mesmo que me ajudaram numa outra situação

Obs: viu sobre o group by eu não postei a instrução inteira, achei que irei complicar, pois o que queria saber era se usando um from com varias tabelas o left join iria funcionar.

Obrigado

Link to comment
Share on other sites

Ola Kleber, o que preciso é gerar um relatorio itens vendido de um determinado centro de custo, ate ai tudo bem, mais na frente preciso exibir o estoque de um determinado almoxarifado, mais pela urgencia aqui acabei fazendo dois select separado, e atraves de um for next unifiquei as duas array, então o problema esta resolvido, depois com mais tempo volto neste select.

Obrigado

Link to comment
Share on other sites

Olá, Luiz, por acaso já tentou usar "left outer join" ao invés de simplesmente "left join" ? Porque dependendo se for junção por fora ou junção por dentro o resultado pode ser diferente caso exista registros em uma tabela e não na outra.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...