USANDO O JOIN

HELDERANGEL 04/08/2009 18:12:32
#318899
Estou criando um relatório de vendas por municipio. Então tenho as tabelas:
TBSAIDAS (notas fiscais)
TBITENSSAI (itens da nota fiscal)
TBPRODUTOS (tabela de produtos, onde se encontra a descrição do produto)
TBCLIENTES(onde se encontra o código do municipio)
TBMUNICIPIOS(onde se encontra o nome do municipio)

Preciso fazer um SELECT onde uso o JOIN para juntar estas tabelas e ordenar por municipio, estado, nota, serie e produto.

Já tentei de todo jeito e só dá erro

Valeu qualquer ajuda

Helder
DANIKULL 04/08/2009 19:42:00
#318922
Maninho boa noite...

Qual a Base de dados que vc esta usando??
A conexão é DAO ou ADO??
Modo vinculado ou desvinculado??
TECLA 04/08/2009 19:49:49
#318924
Poste a ESTRUTURA (campos e tipos de dados) das tabelas mencionadas.

TBSAIDAS (notas fiscais)
TBITENSSAI (itens da nota fiscal)
TBPRODUTOS (tabela de produtos, onde se encontra a descrição do produto)
TBCLIENTES(onde se encontra o código do municipio)
TBMUNICIPIOS(onde se encontra o nome do municipio)
HELDERANGEL 05/08/2009 08:56:10
#318959
estou usando ADO, a estrutura esta no anexo
TECLA 05/08/2009 09:12:19
#318961
Estou disponibilizando a imagem no tópico para facilitar a visualização.



Pergunta básica: Quais são os RELACIONAMENTOS entre as TABELAS?
HELDERANGEL 05/08/2009 16:51:15
#319027
este é o relacionamento:
MUN_CODIGO ----- CLI_MUNICIPIO
TECLA 05/08/2009 20:33:11
#319051
Citação:

HELDERANGEL escreveu:
este é o relacionamento:
MUN_CODIGO ----- CLI_MUNICIPIO



Somente com este, não é possível fazer a junção.
RCMRO 05/08/2009 21:07:51
#319058
Resposta escolhida
Amigo HELDERANGEL,

Aqui vai o código.

Por todos os relacionamentos serem por INNER JOIN, pressupoe-se a existencia de no mínimo 1 registro relacionado em cada tabela para que aparecam os dados.

Ai vai a dica:

-----------------------
SELECT <CAMPOS QUE DESEJA APRESENTAR>
FROM tbSaidas sai
INNER JOIN tbItensSai its
ON its.snf_empresa = sai.isnf_empresa
AND its.snf_cliente = sai.isnf_cliente
AND its.snf_nota = sai.isnf_nota
AND its.snf_serie = sai.isnf_serie
INNER JOIN tbProdutos prd
ON prd.prd_produto = its.snf_produto
INNER JOIN tbClientes cli
ON cli.cli_empresa = sai.isnf_empresa
AND cli.snf_cliente = sai.isnf_cliente
INNER JOIN tbMunicipios mun
ON mun.mun_codigo = cli.cli_municipio
WHERE <FILTROS DESEJADOS>
ORDER BY mun.mun_nome, mun.mun_uf, sai.isnf_nota, sai.isnf_serie, prd.prd_produto
-----------------------
HELDERANGEL 07/08/2009 11:00:39
#319185
RCMRO, fiz mais ou menos como você descreveu acima e ficou como abaixo:

strsql = [Ô]SELECT TBSAIDAS.*, TBITENSSAI.*, TBPRODUTOS.*, TBMUNICIPIOS.MUN_CODIGO,[Ô]
strsql = strsql & [Ô] TBMUNICIPIOS.MUN_NOME FROM TBSAIDAS[Ô]
strsql = strsql & [Ô] INNER JOIN TBITENSSAI ON TBITENSSAI.ISNF_EMPRESA = TBSAIDAS.SNF_EMPRESA[Ô]
strsql = strsql & [Ô] AND TBITENSSAI.ISNF_NOTA = TBSAIDAS.SNF_NOTA AND TBITENSSAI.ISNF_SERIE = TBSAIDAS.SNF_SERIE[Ô]
strsql = strsql & [Ô] INNER JOIN TBCLIENTES ON TBCLIENTES.CLI_EMPRESA = TBSAIDAS.SNF_EMPRESA[Ô]
strsql = strsql & [Ô] AND TBSAIDAS.CLI_CODIGO = TBSAIDAS.SNF_CLIENTE[Ô]
strsql = strsql & [Ô] INNER JOIN TBMUNICIPIOS ON TBMUNICIPIOS.MUN_CODIGO = TBCLIENTES.CLI_MUNICIPIO[Ô]
strsql = strsql & [Ô] WHERE TBSAIDAS.SNF_EMPRESA = [ô][Ô] & EmpPadrao & [Ô][ô][Ô]
strsql = strsql & [Ô] AND TBSAIDAS.SNF_DT_EMISSAO >= #[Ô] & Format(txtDtIni.Text, [Ô]m/d/yyyy[Ô]) & [Ô]#[Ô]
strsql = strsql & [Ô] AND TBSAIDAS.SNF_DT_EMISSAO <= #[Ô] & Format(txtDtFin.Text, [Ô]m/d/yyyy[Ô]) & [Ô]#[Ô]
If optVendedor.Value = True Then
strsql = strsql & [Ô] AND TBSAIDAS.SNF_ATENDIMENTO = [ô]V[ô][Ô]
ElseIf optRepresentante.Value = True Then
strsql = strsql & [Ô] AND TBSAIDAS.SNF_ATENDIMENTO = [ô]R[ô][Ô]
End If
If optAntecipado.Value = True Then
strsql = strsql & [Ô] AND TBSAIDAS.SNF_COND_PAGTO = [Ô] & CondAntecipado & [Ô][Ô]
ElseIf optPrazo.Value = True Then
strsql = strsql & [Ô] AND TBSAIDAS.SNF_COND_PAGTO <> [Ô] & CondAntecipado & [Ô][Ô]
End If
If txtCidade <> [Ô]T[Ô] Then
strsql = strsql & [Ô] AND TBCLIENTES.CLI_MUNICIPIO = [Ô] & txtCidade.Text & [Ô][Ô]
End If
strsql = strsql & [Ô] ORDER BY MUN_NOME, MUN_CODIGO, CLI_UF, ISNF_DT_EMISSAO, ISNF_NOTA, ISNF_SERIE, ISNF_PRODUTO[Ô]

Porém da o erro: [Ô]erro de sintaxe (operador faltando) na expressão de consulta[Ô]

E não consigo achar o erro. Se puder me ajudar... valeu

HELDERANGEL 07/08/2009 11:06:22
#319188
Esqueci, corrigindo o código pois preciso dos dados do cliente
strsql = [Ô]SELECT TBSAIDAS.*, TBITENSSAI.*, TBPRODUTOS.*, TBCLIENTES.*, TBMUNICIPIOS.MUN_CODIGO,[Ô]
strsql = strsql & [Ô] TBMUNICIPIOS.MUN_NOME FROM TBSAIDAS[Ô]
strsql = strsql & [Ô] INNER JOIN TBITENSSAI ON TBITENSSAI.ISNF_EMPRESA = TBSAIDAS.SNF_EMPRESA[Ô]
strsql = strsql & [Ô] AND TBITENSSAI.ISNF_NOTA = TBSAIDAS.SNF_NOTA AND TBITENSSAI.ISNF_SERIE = TBSAIDAS.SNF_SERIE[Ô]
strsql = strsql & [Ô] INNER JOIN TBCLIENTES ON TBCLIENTES.CLI_EMPRESA = TBSAIDAS.SNF_EMPRESA[Ô]
strsql = strsql & [Ô] AND TBSAIDAS.CLI_CODIGO = TBSAIDAS.SNF_CLIENTE[Ô]
strsql = strsql & [Ô] INNER JOIN TBMUNICIPIOS ON TBMUNICIPIOS.MUN_CODIGO = TBCLIENTES.CLI_MUNICIPIO[Ô]
strsql = strsql & [Ô] WHERE TBSAIDAS.SNF_EMPRESA = [ô][Ô] & EmpPadrao & [Ô][ô][Ô]
strsql = strsql & [Ô] AND TBSAIDAS.SNF_DT_EMISSAO >= #[Ô] & Format(txtDtIni.Text, [Ô]m/d/yyyy[Ô]) & [Ô]#[Ô]
strsql = strsql & [Ô] AND TBSAIDAS.SNF_DT_EMISSAO <= #[Ô] & Format(txtDtFin.Text, [Ô]m/d/yyyy[Ô]) & [Ô]#[Ô]
If optVendedor.Value = True Then
strsql = strsql & [Ô] AND TBSAIDAS.SNF_ATENDIMENTO = [ô]V[ô][Ô]
ElseIf optRepresentante.Value = True Then
strsql = strsql & [Ô] AND TBSAIDAS.SNF_ATENDIMENTO = [ô]R[ô][Ô]
End If
If optAntecipado.Value = True Then
strsql = strsql & [Ô] AND TBSAIDAS.SNF_COND_PAGTO = [Ô] & CondAntecipado & [Ô][Ô]
ElseIf optPrazo.Value = True Then
strsql = strsql & [Ô] AND TBSAIDAS.SNF_COND_PAGTO <> [Ô] & CondAntecipado & [Ô][Ô]
End If
If txtCidade <> [Ô]T[Ô] Then
strsql = strsql & [Ô] AND TBCLIENTES.CLI_MUNICIPIO = [Ô] & txtCidade.Text & [Ô][Ô]
End If
strsql = strsql & [Ô] ORDER BY MUN_NOME, MUN_CODIGO, CLI_UF, ISNF_DT_EMISSAO, ISNF_NOTA, ISNF_SERIE, ISNF_PRODUTO[Ô]
RCMRO 07/08/2009 11:15:09
#319191
Amigo HELDERANGEL,

No trecho abaixo você esqueceu de colocar [ô] antes e depois...
--- ERRADO ---
If txtCidade <> [Ô]T[Ô] Then
strsql = strsql & [Ô] AND TBCLIENTES.CLI_MUNICIPIO = [Ô] & txtCidade.Text & [Ô][Ô]
End If
--- CERTO ---
If txtCidade <> [Ô]T[Ô] Then
strsql = strsql & [Ô] AND TBCLIENTES.CLI_MUNICIPIO = [ô][Ô] & txtCidade.Text & [Ô][ô][Ô]
End If

Tenta de novo
Página 1 de 2 [16 registro(s)]
Tópico encerrado , respostas não são mais permitidas