Criar Web, manuais e recursos para desenvolvimento web
Manuais
Programas
FAQS
Diretório
Comunidade
  Inicio > Manuais > Tutorial de SQL
SEÇÕES
Manuais relacionados
+Tutorial de SQL
Categorias
+Linguagem SQL

Índice do Manual Tutorial de SQL
+ O que é SQL
+ Tipos de campos
+ Adicionar um novo registro
+ Apagar um registro
+ Atualizar um registro
+ Seleção de tabelas I
+ Seleção de tabelas II
+ Seleção de tabelas III
+ Seleção de tabelas IV
+ Aproveite seu banco de dados
+ Tabelas temporárias no Sql Server
+ Adquirindo informações do Usuário com a classe System
+ Alguns truques práticos
+ Criação de tabelas
+ SQL e Programação de Banco de Dados
+ Funções para buscas com datas em Access
+ Função em SQL para o cálculo de dias de trabalho
+ SQL com Oracle
+ SQL com Oracle. Operadores
+ Sub-consultas SQL
+ Funções SQL
+ Agrupamento e combinação de elementos com SQL
+ Manipulação de dados com SQL
+ Chaves primárias com SQL com Oracle
+ Definição de chaves para tabelas e restrições
+ Supressão e modificação de tabelas com SQL
+ Gerenciamento de vistas em SQL
+ Usuários em Oracle
+ Gerenciamento em Oracle com SQL
+ Otimizar consultas SQL
+ Consultas de seleção
+ Critérios de seleção em SQL
+ Como exibir informações com múltiplas instruções SQL
+ Critérios de seleção em SQL II
+ Consultas de ação
+ Tipos de dados SQL
+ Subconsultas em SQL
+ Consultas SQL de União Internas
+ Estruturas das tabelas em SQL
+ Cursores em SQL
+ Referências Cruzadas em SQL
+ Introdução a freetext e contains em SQL-Server
+ Acesso ao banco de dados externos
+ Consultas com parâmetros e omissão de permissões
+ Procedures e busca de registros duplicados em SQL
+ A função datepart() em Access
+ Emular um Cursor SQL com um Loop
+ Tipos de instruções SQL e seus componentes sintáticos

Descrição dos capítulos

Parceiros
- CSS para Web Design
- S.O.S Designers
- Slackware-Brasil
- Crie seu Web site
- Oficina da Net


Referências Cruzadas em SQL

O que são as referências cruzadas, como se constroem e para que se utilizam.


Uma consulta de referências cruzadas é aquela que nos permite visualizar os dados em filas e em colunas, estilo tabela, por exemplo:

Produto / Ano19961997
Calças1.250 3.000
Camisas8.560 1.253
Sapatos4.369 2.563

Se tivermos uma tabela de produtos e outra tabela de pedidos, podemos visualizar em total de produtos pedidos por ano para um artigo determinado, tal e como se visualiza na tabela anterior. A sintaxe para este tipo de consulta é a seguinte:

TRANSFORM função agregada instrução select PIVOT campo pivot
[IN (valor1[, valor2[, ...]])]


Onde:

função agregadaÉ uma função SQL agregada que opera sobre os dados selecionados.
instrução selectÉ uma instrução SELECT.
campo pivotÉ o campo ou expressão que deseja utilizar para criar os cabeçalhos da coluna no resultado da consulta.
valor1, valor2 São valores fixos utilizados para criar os cabeçalhos da coluna.

Para resumir dados utilizando uma consulta de referência cruzada, se selecionam os valores dos campos ou expressões especificadas como cabeçalhos de colunas de tal forma que podem se ver os dados em um formato mais compacto que com uma consulta de seleção.

TRANSFORM é opcional, porém se for incluída é a primeira instrução de uma cadeia SQL. Precede à instrução SELECT que especifica os campos utilizados como cabeçalhos de fila e uma cláusula GROUP BY que especifica o agrupamento das filas. Opcionalmente pode incluir outras cláusulas como, por exemplo, WHERE, que especifica uma seleção adicional ou um critério de ordenação.

Os valores devolvidos em campo pivot se utilizam como cabeçalhos de coluna no resultado da consulta. Por exemplo, ao utilizar as cifras de vendas no mês da venda como pivot em uma consulta de referência cruzada se criariam 12 colunas. Pode restringir o campo pivot para criar cabeçalhos a partir dos valores fixos (valor1, valor2) listados na cláusula opcional IN.

Também pode incluir valores fixos, para os que não existem dados, para criar colunas adicionais.

Exemplos

TRANSFORM
   Sum(Quantidade) AS Vendas
SELECT
   Produto, Quantidade
FROM
   Pedidos
WHERE
   Data Between #01-01-1998# And #12-31-1998#
GROUP BY
   Produto
ORDER BY
   Produto
PIVOT
   DatePart("m", Data)
(Cria uma consulta de tabela de referências cruzadas que mostra as vendas de produtos por mês para um ano específico. Os meses aparecem da esquerda à direita como colunas e os nomes dos produtos aparecem de cima para baixo como filas.)

TRANSFORM
   Sum(Quantidade) AS Vendas
SELECT
    Companhia
FROM
    Pedidos
WHERE
    Data Between #01-01-1998# And #12-31-1998#
GROUP BY
    Companhia
ORDER BY
   Companhia
PIVOT
    "Trimestre " &
    DatePart("q", Data)
    In ('Trimestre1', 'Trimestre2', 'Trimestre 3', 'Trimestre 4')
(Cria uma consulta de tabela de referências cruzadas que mostra as vendas de produtos por trimestre de cada provedor no ano indicado. Os trimestres aparecem da esquerda à direta como colunas e os nomes dos provedores aparecem de cima para baixo como filas.)

Um caso prático:

Trata-se de resolver o seguinte problema: temos uma tabela de produtos com dois campos, o código e o nome do produto. Temos outra tabela de pedidos na que anotamos o código do produto, a data do pedido e a quantidade pedida. Desejamos consultar os totais de produto por ano, calculando a média anual de vendas.

Estrutura e dados das tabelas:


Para resolver a consulta sondaremos a seguinte consulta:

TRANSFORM
   Sum(Pedidos.Quantidade) AS Resultado
SELECT
   Nombre AS Produto, Pedidos.Id AS Código,
    Sum(Pedidos.Quantidade) AS TOTAL,
    Avg(Pedidos.Quantidade) AS Media
FROM
    Pedidos, Artigos
WHERE
   Pedidos.Id = Artigos.Id
GROUP BY
    Pedidos.Id, Artigos.Nome
PIVOT
    Year(Data)

E obtemos o seguinte resultado:

ProdutoCódigoTotalMedia19961997
Sapatos 13488730048
Calças2955238,75375580
Blusas319404856201320

Comentários à consulta:

A cláusula TRANSFORM indica o valor que desejamos visualizar nas colunas que realmente pertencem à consulta, neste caso 1996 e 1997, visto que ademais colunas são opcionais. SELECT especifica o nome das colunas opcionais que desejamos visualizar, neste caso, Produto, Código, Total e Média, indicando o nome do campo que desejamos mostrar em cada coluna ou o valor da mesma. Se incluirmos uma função de cálculo o resultado se fará baseando-se nos dados da fila atual e não ao total dos dados.

FROM especifica a origem dos dados. A primeira tabela que deve figurar é aquela de onde desejamos extrair os dados, esta tabela deve conter ao menos três campos, um para os títulos da fila, outros para os títulos da coluna e outro para calcular o valor das células.

Neste caso em concreto se desejava visualizar o nome do produto, como na tabela de pedidos só figurava o código do mesmo se adicionou uma nova coluna na cláusula select chamada Produto que se corresponda com o campo Nome da tabela de artigos. Para vincular o código do artigo da tabela de pedidos com o nome do mesmo da tabela artigos, foi inserido a cláusula INNER JOIN.

A cláusula GROUP BY especifica o agrupamento dos registros, contrariamente aos manuais de instrução esta cláusula não é opcional já que deve figurar sempre e devemos agrupar os registros pelo campo do qual extrairemos a informação. Neste caso existem dois campos dos que extraímos a informação: pedidos.quantidade e artigos.nome, por isso, agrupamos pelos campos.

Para finalizar, a cláusula PIVOT indica o nome das colunas não opcionais, neste caso 1996 e 1997 e como vamos ao dado que aparecerá nas colunas, neste caso empregamos o ano em que se produziu o pedido, extraindo-o do campo pedidos.fecha.

Outras possibilidades de data da cláusula pivot são as seguintes:

  1. Para agrupamento por Trimestres:
    PIVOT "Tri " & DatePart("q",[Data]);
  2. Para agrupamento por meses (sem ter em conta o ano)
    PIVOT Format([Data],"mmm") In ("Jan", "Fev", "Mar", "Abr", "Maio", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez");
  3. Para agrupar por dias
    PIVOT Format([Data],"Short Date");

Autoria e outras referências sobre este artigo

Manuais relacionados com este artigo
Dentro de Tutorial de SQL
Anterior: Cursores em SQL

Categorias relacionadas
Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo:
+ Entrar em Linguagem SQL


Comentários dos visitantes
Os comentários dos visitantes são para ampliar a informação do artigo. Todos podem participar.
Acrescentar um comentário do artigo Acrescentar um comentário do artigo



Sobre nós | Copyright | Anuncie | Entrar em contato <criarweb>

Hospedado por Hostnet Hospedagem de Sites