USANDO O JOIN
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
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
Maninho boa noite...
Qual a Base de dados que vc esta usando??
A conexão é DAO ou ADO??
Modo vinculado ou desvinculado??
Qual a Base de dados que vc esta usando??
A conexão é DAO ou ADO??
Modo vinculado ou desvinculado??
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)
estou usando ADO, a estrutura esta no anexo
este é o relacionamento:
MUN_CODIGO ----- CLI_MUNICIPIO
MUN_CODIGO ----- CLI_MUNICIPIO
Citação:HELDERANGEL escreveu:
este é o relacionamento:
MUN_CODIGO ----- CLI_MUNICIPIO
Somente com este, não é possÃvel fazer a junção.
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
-----------------------
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
-----------------------
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
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
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[Ô]
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[Ô]
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
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
Tópico encerrado , respostas não são mais permitidas