SQL é uma sigla inglesa de “Structured Query Language” que significa, em Português, Linguagem de Consulta Estruturada, uma linguagem padrão de gerenciamento de dados que interage com os principais bancos de dados baseados no modelo relacional, usada para entre outras coisas, realizar consultas em bancos de dados e sistemas de informação.
Com o objetivo de permitir o acesso às informações do banco de dados, na geração de relatórios pelo próprio usuário/cliente, o ERPFLEX disponibilizou uma ferramenta que possibilita o cliente gerar suas próprias queries (SQL) e assim criar seus próprios relatórios.
Para gerar as queries, faz-se necessário conhecimentos básicos da linguagem SQL, portanto, esse tópico tem o propósito de somente esclarecer e permitir o manuseio das funcionalidades da tela de consulta SQL, disponibilizado no menu do sistema.
Sendo assim, deseja-se que o leitor tenha condições de criar suas queries usando os recursos disponíveis na tela do sistema, como transcrever a query, salvar, editar, definir parâmetros no momento da execução, imprimir, excluir e exportar para um formato de planilha.
A consulta gerada pode ser impressa, convertido para Excel e em formulário Flexprint.
Vamos falar um pouco da Modelagem dos Dados. Existe um dogma que diz: para se conhecer um sistema, basta estudar bem o conteúdo de suas Tabelas.
O sistema de gerenciamento de banco de dados utilizado pelo ERPFlex é o MySQL. Os dados cadastrados são mantidos em um conjunto de mais de 100 tabelas. É importante conhecê-las para, por exemplo, utilizar bem o Gerador de Relatórios, o Flexcel, o Gerador de arquivos Excel, os formulários criados no Word (RTF) e as Consultas com o uso do comando Select.
O nome de cada Tabela é composto de 3 dígitos e cada um de seus campos tem como prefixo esses 3 dígitos seguidos de um underline e do nome propriamente dito do campo.
No ERPFlex, o Banco armazena várias empresas e um campo denominado XXX_IDEA1 contém o número da Empresa (XXX é o código da Tabela). Algumas Tabelas, chamadas de Universais, não têm esse campo. Seus registros são usados por todas as Empresas, como por exemplo, a Tabela de Municípios do Brasil.
No SQL todo registro tem um ID, que é um campo com um número sequencial ascendente, gerado automaticamente, definido como chave primária e que o identifica. Para esse campo existe um índice, o que torna o acesso por meio dele bem rápido.
Todos os relacionamentos no SQL são feitos por IDs. Assim, por exemplo, na Tabela de Faturamento, onde constam os dados da Nota Fiscal, não existe um campo com o nome do Cliente, o nome do Produto ou do Vendedor. Existe o ID desses registros em suas respectivas tabelas. E o SQL mantém a Integridade Referencial, ou seja, impede que haja registros “órfãos”. Assim, por exemplo, é impossível registrar-se uma Nota Fiscal de um Cliente não cadastrado, mesmo porque isso é feito via combo-box (escolha), assim como não é possível apagar-se um Cliente que já tenha uma Nota emitida com o seu ID. E o SQL permite que se faça, com um simples comando SELECT, a leitura de um ou mais registros trazendo para a memória não somente os seus campos, mas todos os campos de todos os registros relacionados.
O SQL (Structure Query Language) tem, além do SELECT, os comandos Insert, Update e Delete para incluir-se novos registros, atualizá-los e deletá-los. Esses comandos são conhecidos como CRUD (Create, Read, Update e Delete); no entanto, a tela de consulta SQL no ERPFLEX permitirá somente a realização de pesquisa de dados, não permitindo atualizações, inserções ou mesmo exclusões.
As tabelas do ERPFlex podem ser divididas em grupos. Observe a seguir:
Dados Básicos
- Empresa
Contém os dados básicos das empresas usuárias do ERPFlex (nome, CNPJ, endereço, etc). A rigor, para cada nova empresa que vá utilizar o ERPFlex, basta criar um novo registro nesta tabela, com um Usuário de Perfil Administrador. - Usuários
Campos principais: usuário e perfil. Para fazer o Login no sistema é preciso mencionar o usuário, pelo seu nome ou email e a senha. Não confundir Usuário com Cliente. Cliente é quem compra de um Usuário do ERPFlex. - Usuários x Empresa
Esse tipo de Tabela é chamado, no SQL, de Tabela de Ligação ou Amarração. Ela é criada quando se tem um relacionamento n:n.
Vamos analisar primeiro um relacionamento 1:n, como por exemplo, cada Nota Fiscal só tem um cliente, cada item da nota só tem um produto, o simples ID do “Pai” no registro “Filho” é suficiente para fazer a ligação. Mas se tivermos n Usuários para uma Empresa e cada Usuário pode ter acesso a várias empresas, teríamos que ter na tabela de Usuários vários campos com os IDs das Empresas. Ocorre que ao criar uma Tabela é preciso definir claramente os seus campos. E quantos campos com IDs de Empresa teríamos? Não existe um número máximo de empresas que um Usuário pode ter.
Para resolver esse problema, cria-se uma Tabela de Ligação Usuário x Empresa, que contém os dois IDs. Nessa tabela ainda consta o ID no MN2, que indica o perfil do Usuário naquela empresa e consequentemente o menu que será a ele disponibilizado. - MN1 – Menu completo
Nesta tabela estão todas as opções do Menu do ERPFlex, independentemente da empresa e do Perfil do Usuário e por isso o código da Empresa é zero. Contém, é claro, o nome do programa a ser chamado. A tabela MN1 é uma tabela universal, ou seja, não tem o código da empresa, pois seu conteúdo é igual para todas elas. Por outro lado, as opções que alteram essas tabelas somente são acessíveis para o perfil SUPORTE. - MN2 – Perfis de Usuário
Indica quais os perfis criados para cada empresa. A criação do perfil Administrador (que pode criar outros perfis e outros usuários) é automática e igual para todas as empresas. Posteriormente pode ser alterado por ele. - MN3 – Amarração entre o Perfil e as opções do menu
Essa tabela amarra cada opção do Menu (MN1) a cada Perfil (MN2) de cada empresa. Com isso, cada perfil terá suas próprias opções, permitindo uma boa flexibilidade na disponibilização dos menus.
Essa flexibilidade permite inclusive que se desenvolvam opções novas para funcionalidades inexistentes no ERPFlex original, disponibilizando-as apenas para aqueles usuários que as desejarem. - SX6 – Parâmetros
Essa tabela serve para definir procedimentos e valores no ERPFlex, dando uma boa flexibilidade ao sistema. Número de colunas numa janela, escolha das cores na loja virtual, pequenas tabelas como códigos de serviços, faixas de CEP, alíquotas de impostos, naturezas, bancos e serviços padrão em determinadas situações, legendas e formatos nos campos adicionais, definição de procedimentos e outros são exemplos de parâmetros existentes.
Os parâmetros permitem uma customização do ERPFlex pelo próprio usuário, desde que previamente programado. Customizações que não forem genéricas para todos usuários devem ser feitas via parâmetro, a não ser que se desenvolva programas específicos de uso restrito.
O relacionamento das Tabelas segue as formas normais estabelecidas para Banco de Dados SQL de não redundância e unicidade.
Alguns aspectos referentes à Modelagem são passíveis de discussão, como as tabelas SF1 e SD1 que guardam o cabeçalho e os itens de cada NF de Entrada. A SF2 e SD2, as NFs de saída. E claro, no SDn consta o ID do SFn. A criação de um registro para o cabeçalho com os dados gerais de um documento e n registros detalhes para cada item é uma técnica que evita a redundância de alguns dados, mas pode degradar um pouco a sua leitura, pois a cada item “filho” lido é necessário buscar os dados do cabeçalho (“pai”). Isso também é feito através do comando LEFT JOIN. No SELECT define-se quais campos se deseja. Os filtros são feitos através da cláusula WHERE.
Esquema semelhante de Cabeçalho e Item é usado no SC5/SC6 (Orçamento) e IE1/IE2 (Investimentos e Empréstimos).
Detalhamento do Processo da Carteira de Títulos
Assim é o processo da carteira de títulos, seus pagamentos e recebimentos, baixas parciais, antecipações, geração de faturas, compensação de um título com outro, descontos e acréscimos e respectivos cancelamentos:
O processo se inicia com a geração dos registros SE1 e SE2. Eles podem ser gerados de 4 formas distintas:
- Pela emissão de uma nota fiscal, com ou sem NF-e. O cabeçalho (que tem o ID do Cliente, a data de emissão e outros dados genéricos) é o SF1/2
- Pela emissão de um empréstimo ou investimento (o cabeçalho é o IE2)
- Pela transferência bancária (de um Banco para outro), quando são gerados um SE1 e um SE2. O cabeçalho é o SE3.
- Pela emissão de uma fatura, que pode ser tanto pela junção de vários títulos de um mesmo cliente/fornecedor como quando da baixa de um cartão de crédito, em que são juntadas todas as receitas ou despesas apresentadas no extrato do cartão numa única fatura que depois pode ser baixada total ou parcialmente. O cabeçalho é o SEA
- Quando de um pagamento ou recebimento antecipado. No caso de recebimento é gerado um SE2 do valor recebido e um SE5 do depósito. O cabeçalho é o SE7. Para retratar a obrigação com o cliente é gerado um SE1/2, em aberto, que tem como cabeçalho o mesmo SE7 e vice versa no caso de um pagamento. Quando do aproveitamento desse adiantamento, tanto o SE1 como o SE2 da nota que o está usufruindo são baixados no Caixa. No Balanço esses valores são apresentados com sinais invertidos, no mesmo estilo de contas redutoras.
Quando se baixa um título através de um recebimento/pagamento é gerado um SE5. Neste momento é gravado no SE1/SE2 no campo Valor Pago a data de baixa (preenchido esse campo, o registro é considerado baixado) e o ID do Banco. Se estiver gravada a Data de Baixa e o campo Banco não estiver preenchido é porque aquela parcela foi substituída por uma Fatura.
Se houve um desconto no SE5 é gravado o valor que entrou ou saiu do banco. No SE1/SE2, campo Valor Recebido ou Pago, é gravado o valor referente ao título, ou seja, é somado o desconto, mas não é somado o acréscimo e é gerado um SE5 com o valor do Desconto, depositado (no caso de título a receber) no Caixa e gerado um SF,SD e SE1/2 referente ao Desconto já baixado no Caixa. Exemplo: tem-se um título de 100 a receber, que na baixa sofre um desconto de 5. Debita-se 95 no Banco e 5 no Caixa e credita-se 100 no Cliente. A seguir, debita-se 5 em Despesa com Descontos e credita-se 5 no Caixa, matando o débito anterior.
No caso de acréscimo, o SE5 do título vai com seu valor original e é gerado um SF, SD e SE referente à receita (no caso de Título a Receber), que é depositado no mesmo banco.
Se for um recebimento ou pagamento parcial, o valor é gravado (somado no caso de várias baixas parciais, concatenando-se o nome do banco) em Valor Pago do SE1/2 e é gravada a data de baixa e gerado um SE5. A diferença entre o Valor do Título e o Valor Pago é a dívida atual.
Portanto, para saber qual o valor a receber ou a pagar da empresa, basta ler o SE1 e SE2 e subtrair o Valor do Título do Valor pago. Para saber quanto entrou e saiu de dinheiro na empresa, basta ler o SE5. Isso só é válido quando se está falando no saldo atual. Se considerarmos uma data anterior não, pois é possível termos várias baixas parciais de um título e neste caso no SE1 e SE2 ele vai somando em Valor Pago as várias baixas e sobrepondo a data de baixa. Para saber-se o valor exato em aberto em uma data retroativa, só mesmo lendo o valor original e subtraindo os SE5 anteriores àquela data, pois a data de baixa não é concatenada; somente o Banco.
Quando é gerada uma Fatura, no SE1/SE2 original, é gravada a data de baixa, lembrando que numa fatura não pode ser jogado um valor parcial do título. O controle passa a ser feito nos SE1/SE2 da fatura. O título original, onde é gravado o valor pago, é considerado como baixado, a fatura não. Neste momento também é gravado um SEA, que é o cabeçalho da fatura, tendo inclusive como data de emissão a data do evento e o ID do SA1, ou seja, dados análogos ao SF1/SF2. É nos relatórios de Títulos a Receber que se vê claramente que o título original está baixado e a fatura não. Recapitulando, Faturas são geradas em duas situações: quando se junta várias Notas em um único Boleto e quando se paga/recebe os vários itens de um extrato de Cartão de Crédito.
No caso de Compensação (um título a receber é compensado por um título a pagar do mesmo cliente/fornecedor) é gerado um SE5 para os dois. Ambos os valores são lançados no caixa. No SE8 é gravado a origem e o destino na compensação. Equivale a fazer-se a baixa dos dois títulos contra o Caixa.
No caso de Antecipação de Pagamentos e Recebimentos, a baixa correspondente é feita no ato da geração da nota. Na data de Antecipação é gravado um SE1/2 com sinal negativo, com cabeçalho SE7 e um SE5. Assim, nas posições de Contas a Receber e a Pagar eles aparecem subtraindo do total.
Nome | Descrição |
SED | Naturezas |
AC1 | Valor Acumulado das Naturezas |
SBA | Categorias e Subcategorias de Produtos/Serviços |
SB1 | Produtos/Serviços |
SB2 | Saldos das Variantes |
SB2_DESCITENSVAR | Nomes dos Itens de Variantes |
SB2_ITENSVAR | Discrimina o SB2_DESCITENSVAR (Um ID para cada item) |
SB2_SBW | Estoque por Armazém |
SBL | Cadastro de Lotes |
SB2_SBW_SBL | Saldo dos lotes por armazém |
SB3 | De/para dos códigos de produtos dos fornecedores/clientes |
SBB | Variantes |
SBC | Variantes de cada Produto |
SBE | Atributos loja virtual |
SBD | Opção do atributo |
SBF | Amarra SBE x SB1 |
SB1_UM | Unidades de Medida para o SPED |
SB1_Fator | Fator de Conversão da UM para o SPED |
SAO | Operadores |
SBK | Kit de Produtos |
SBP | Tabela de preços |
SBW | Armazéns |
NCM | Nomenclatura Comum do Mercosul |
SG1 | Estrutura |
SD3 | Movimento Interno (Requisições, Devoluções e Produção) |
SD4 | Movimentação por Armazém/Lote de cada SD1, SD2 e SD3 |
SC2 | Ordens de Produção e Serviços |
SOB | Operações |
SAO | Operadores |
SC8 | Ficha de Produção |
SC9 | Itens da Ficha de Produção |
SAA | Perfil/Item dos Clientes |
SA1 | Clientes e Fornecedores |
SAC | Cliente x Perfil x Item |
SAR | Relacionamento de parentes de cada cliente |
SAQ | Contatos de Clientes e Fornecedores |
SA1_SA3 | Clientes x Vendedores |
SA1_SEP | Clientes x Formas de pagamento |
SA3 | Vendedores |
SAB | Vendedor x Produto |
SA4 | Transportadoras |
SA5 | Terceiros |
SE7 | Cabeçalho dos Pagamentos e Recebimentos antecipados |
SE8 | Amarra as compensações de títulos a receber e a pagar |
SEA | Cabeçalho da Fatura |
SEP | Formas de pagamento |
SEF | Antigo Faturas – não é mais usado |
IE1 | Cadastro de Investimentos e Empréstimos |
IE2 | Movimentação de Investimentos e Empréstimos |
SI1 | Saldos iniciais do Plano Referencial |
SI2 | Lançamentos Contábeis de Ajuste |
SPD | Plano Referencial ou Plano próprio |
SPD_ALT | Alteração de cliente e produtos para o SPED |
SPM | Lançamentos Manuais no SPED |
SB1_UM | Unidades de Medida para o SPED |
SB1_Fator | Fator de Conversão da UM para o SPED |
EV1 | Eventos do CRM |
EV2 | Tipo de Ocorrências |
EV3 | Evento x Tipo de Ocorrências |
EV4 | Ocorrências |
SR1 | Calendário do Agendamento |
SR2 | Recursos a serem agendados |
SR3 | Agendamentos |
SD5 | Contrato |
SD6 | Itens dos Contratos |
SD7 | Situação do Contrato |
IMG | Nome dos arquivos imagens de cada produto e de cada cliente |
ET1 | Layout das etiquetas |
ET2 | Linhas das etiquetas |
VI1 | Integração com Vitrine |
API | Tabela de correspondência de campos entre a API e o ERPFlex |
APU | Tabela de Usuários que têm permissão de usar a API para uma empresa específica |
Dic_colunas | Usado pelo Gerador e Browser (SX3). Vale para todo mundo |
Dic_database | Para separar Bancos |
Dic_indicadores | Indicadores default do ERPFlex |
SP3 | Fórmulas dos Indicadores dos usuários |
SP4 | Visão do usuário no Painel de Gestão (quais indicadores são mostrados) |
Dic_modulos | Tabelas possíveis de serem usadas em combobox, no Flexcel para campos tipo consulta |
Dic_relacoes | São as relações usados no Gerador de Relatórios |
Dic_tabcompart | Usado no Compartilhamento de Tabelas e Consolidação de uma Empresa |
Dic_tabelas | São as Tabelas que podem ser chamadas no Gerador |
RPT_Defines | Define os relatórios criados |
RPT_Parameters | Define os parâmetros de cada relatório |
SPR | Dicionário de Registros para os acertos no SPED |
SP5 | Campos do Flexcel (filho do SP6) |
SP6 | Definições do Flexcel (pai do SP5) |
SPxnnnn | Dados do Flexcel (Cada Tabela Flexcel) |
SP7 | Consulta do SQL |
SZ | Tabelas de rotinas específicas de clientes |
SZ1 | Fornecedores x Produtos |
SZ2 | Clientes x Produtos |
SZ3 | Clientes x Contatos |
SP1 SP2 | Pipeline (desativado) |
DR1 e DR2 | Despesa e Receita (desativado) |
LOG_SYS, , SX1, SX2, SX9, SXZ, SZ1…D, TEMPX | Sem uso |
CFOV, ESTAT, MN1V, PRODUTOS, SACV, SB1V, SB2V, SG1V | VIEWS |
ESTAT | dados de uso do sistema pelos clientes |
Tem também functions e triggers |
- Acesse Consulta e Relatórios, Personalizados, Consulta SQL;
- Clique no Botão Nova Consulta;
- Defina um Nome para a Consulta (Relação de Clientes);
- Entre com os dados para gerar uma Consulta:
SELECT SA1_Desc, SA1_Fantasia, SA1_End, SA1_Numero, SA1_Bairro, SA1_Mun, SA1_Est, SA1_CEP, SA1_CPF, SA1_Inscr
FROM SA1
- Essa consulta exibe dados (apenas alguns) dos clientes/fornecedores, sendo que SA1 é a tabela de Clientes/Fornecedores. Caso queira mudar o nome de exibição na consulta utilize a clausula “AS”, ex. SA1_Desc AS ‘Nome’
- Essa consulta exibe dados (apenas alguns) dos clientes/fornecedores, sendo que SA1 é a tabela de Clientes/Fornecedores. Caso queira mudar o nome de exibição na consulta utilize a clausula “AS”, ex. SA1_Desc AS ‘Nome’
- Clique no Ícone para executar a Consulta;
- Pode-se ainda formatar o tipo de dados das colunas clicando no ícone .
Ex. SA1_Numero defina como numérico e 0 (zeros) para casas decimais, clique em Salvar para assumir a alteração. - Para definir parâmetros de uma Consulta clique em + Adicionar e altere o título para Estado e selecione o Tipo Caracter.
O Tipo Consulta permite listar dados de um cadastro na janela de parâmetro. O botão Configurar abre uma janela para definir especificações conforme o tipo do campo, como tamanho. - Clique em Salvar para gravar o parâmetro.
- Na área da consulta, adicione a clausula WHERE conforme demonstrado abaixo:
SELECT SA1_Desc, SA1_Fantasia, SA1_End, SA1_Numero, SA1_Bairro, SA1_Mun, SA1_Est, SA1_CEP, SA1_CPF, SA1_InscrFROM SA1WHERE SA1_Est = ‘$param1’
Observação: Pode-se incluir vários parâmetros em uma consulta ex.
- Em seguida, clique em – Salvar a consulta será disponibilizada na relação de consultas.
- Clique no botão Executar para processar a consulta.
- Na execução da Consulta será solicitado o Estado que deseja consultar ex. ‘SP’.
Agrupando dados da Consulta
Para agrupar dados da Consulta, incluindo subtotais para os dados numéricos, basta arrastar o nome da coluna até a linha indicada.
Alterando uma Consulta
Para editar o código de uma consulta, clique no botão Editar na lista de Consultas.
Excluindo uma Consulta
Para deletar uma consulta, clique no botão Excluir na lista de Consultas.
- Acesse Consulta e Relatórios, Personalizados, Consulta SQL;
- Clique no Botão Nova Consulta;
- Defina um Nome para a Consulta (Relação de Clientes/Vendedor);
- Entre com os dados para gerar uma Consulta:
SELECT SA1_Desc, SA1_Contato, SA1_DDDCom, SA1_TelCom, SA1_EMail, SA3_Desc FROM SA1INNER JOIN SA1_SA3 ON SA1_SA3_IDSA1 = SA1_IDINNER JOIN SA3 ON SA1_SA3_IDSA3 = SA3_ID
Observação. Como exemplo, fazemos um Inner Join com a tabela SA1_SA3 que é a Tabela de Clientes x Vendedores com a tabela SA1(Clientes/Fornecedores), e em seguida fazemos outro Inner Join com a SA3 para relacionarmos o Vendedor cadastrado.
- Em seguida, clique em – Salvar a consulta será disponibilizada na relação de consultas.
- Clique no Ícone para executar a Consulta;
SELECT contém cláusulas específicas que permitem definir melhor a leitura;
SELECT SA1_Desc, SA1_Contato, SA1_DDDCom, SA1_TelCom, SA1_EMail, SA3_Desc
FROM SA1
INNER JOIN SA1_SA3 ON SA1_ID = SA1_SA3_IDSA1
INNER JOIN SA3 ON SA1_SA3_IDSA3 = SA3_ID
ORDER By: coloca os registros lidos na sequencia desejada pode ser ASC (ascendente) ou DESC (descendente), caso não especifique será considerada ASC (ascendente)
SELECT SA1_Desc, SA1_Contato, SA1_DDDCom, SA1_TelCom, SA1_EMail, SA3_Desc
FROM SA1
INNER JOIN SA1_SA3 ON SA1_ID = SA1_SA3_IDSA1
INNER JOIN SA3 ON SA1_SA3_IDSA3 = SA3_ID
ORDER BY SA1_Desc ASC
GROUP: agrupa dados segundo uma Dimensão, apresentando os totais dos campos numéricos
SELECT SA1_Desc AS “Cliente”,
SUM(SD2_ValItem) AS “Valor Faturamento”
FROM SF2
INNER JOIN SD2 ON SD2_IDSF2 = SF2_ID
INNER JOIN SA1 ON SA1_ID = SF2_IDSA1
GROUP BY SA1_ID
ORDER BY SUM(SD2_ValItem) DESC
DISTINCT: lê apenas um registro de cada conteúdo do campo especificado
SELECT DISTINCT SA1_Desc, SA1_Contato, SA1_DDDCom, SA1_TelCom, SA1_EMail, SA3_Desc
FROM SA1
INNER JOIN SA1_SA3 ON SA1_ID = SA1_SA3_IDSA1
INNER JOIN SA3 ON SA1_SA3_IDSA3 = SA3_ID
ORDER BY SA1_Desc
GROUP BY SA1_ID
SUM, MIN, MAX, AVG (Average): traz a soma, o valor mínimo, máximo, média de determinado campo
SELECT SA1_Desc AS “Cliente”,
SUM(SD2_ValItem) AS “Valor Faturamento”
FROM SF2
INNER JOIN SD2 ON SD2_IDSF2 = SF2_ID
INNER JOIN SA1 ON SA1_ID = SF2_IDSA1
GROUP BY SA1_ID
ORDER BY SUM(SD2_ValItem)
SELECT SA1_Desc AS “Cliente”,
MIN(SD2_ValItem) AS “Valor Mínimo Faturamento”
FROM SF2
INNER JOIN SD2 ON SD2_IDSF2 = SF2_ID
INNER JOIN SA1 ON SA1_ID = SF2_IDSA1
GROUP BY SA1_ID
ORDER BY MIN(SD2_ValItem) DESC
SELECT SA1_Desc AS “Cliente”,
MAX(SD2_ValItem) AS “Valor Máximo Faturamento”
FROM SF2
INNER JOIN SD2 ON SD2_IDSF2 = SF2_ID
INNER JOIN SA1 ON SA1_ID = SF2_IDSA1
GROUP BY SA1_ID
ORDER BY MAX(SD2_ValItem) DESC
SELECT SA1_Desc AS “Cliente”,
AVG(SD2_ValItem) AS “Média Faturamento”
FROM SF2
INNER JOIN SD2 ON SD2_IDSF2 = SF2_ID
INNER JOIN SA1 ON SA1_ID = SF2_IDSA1
GROUP BY SA1_ID
ORDER BY AVG(SD2_ValItem) DESC
COUNT: conta a quantidade de registros
SELECT COUNT(*) FROM SA1 WHERE SA1_TIPO = 1 (SOMENTE CLIENTES)
WHERE: filtra os dados por qualquer campo, com cláusulas de ==, !=, >, <, etc.
SELECT SA1_Desc, SA1_Contato, SA1_DDDCom, SA1_TelCom, SA1_EMail, SA1_Est, SA3_Desc
FROM SA1
INNER JOIN SA1_SA3 ON SA1_ID = SA1_SA3_IDSA1
INNER JOIN SA3 ON SA1_SA3_IDSA3 = SA3_ID
WHERE SA1_Est = ‘MG’
ORDER BY SA1_ID
GROUP BY SA1_ID
Para verificar o nome de todos os campos de uma tabela executa-se o comando a seguir, em cada tabela que deseja verificar.
SELECT * FROM SB1;
SELECT * FROM SA1;
SELECT * FROM SA3.
Serão apresentadas todas colunas as que apresentem o ID (ex. SA1_ID) é o principal da tabela. Para ligação com outra tabela, deve ser identificado o campo XX_IDXXX, (ex. SA1_IDSA3), ou seja, todas as ligações entre tabelas são efetuadas via campo IDs.
É possível imprimir o resultado da consulta por meio um formulário Flexprint.
Para criar um formulário Flexprint:
- Execute a consulta, clicando no botão Executar na lista de Consultas.
- O botão Flexprint será disponibilizado na janela de resultado da consulta.
- Inicialmente, escolha a opção Todos os registros para iniciar a criação do formulário.
- Clique em Novo Modelo e crie o formulário, conforme as instruções do tópico Flexprint
É possível exportar o resultado da consulta para o Excel.
- Execute a consulta, clicando no botão Executar na lista de Consultas.
- O botão Exportar será disponibilizado na janela de resultado da consulta.
- Escolha o formato desejado.