Girar uma tabela em SQL Server

Este artigo descreve como girar uma tabela em SQL Server.

Versão original do produto: SQL Server
Número de KB original: 175574

Resumo

Este artigo descreve como girar uma tabela de SQL Server. Suponha que você tenha uma tabela chamada QTRSALES. A tabela tem as colunas YEAR, QUARTERe AMOUNT com os dados no formato a seguir.

Observação

Não há linha para o quarto trimestre de 1996:

Ano Trimestre Valor
1995 1 125,000.90
1995 2 136,000.75
1995 3 212,000.34
1995 4 328,000.82
1996 3 728,000.35
1996 2 422,000.13
1996 1 328,000.82

Agora, suponha que você queira girar a tabela para que você possa ver os dados no seguinte formato:

YEAR Q1 2º trimestre Q3 Q4
1995 125,000.90 136,000.75 212,000.34 328,000.82
1996 328,000.82 422,000.13 728,000.35 0.00

A consulta que você usaria para girar a tabela está na próxima seção deste artigo.

Consulta de exemplo para girar a tabela

Aqui está a consulta que você usaria para girar a tabela:

SELECT YEAR,
Q1= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 1 AND YEAR =
Q.YEAR),0),
Q2= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 2 AND YEAR =
Q.YEAR),0),
Q3= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 3 AND YEAR =
Q.YEAR),0),
Q4= ISNULL((SELECT AMOUNT FROM QTRSALES WHERE QUARTER = 4 AND YEAR =
Q.YEAR),0)
FROM QTRSALES Q
GROUP BY YEAR

Consulta para tabelas grandes

Para tabelas grandes, essa consulta será mais rápida:

SELECT YEAR,
SUM(CASE quarter WHEN 1 THEN amount ELSE 0 END) AS Q1,
SUM(CASE quarter WHEN 2 THEN amount ELSE 0 END) AS Q2,
SUM(CASE quarter WHEN 3 THEN amount ELSE 0 END) AS Q3,
SUM(CASE quarter WHEN 4 THEN amount ELSE 0 END) AS Q4
FROM qtrsales q
GROUP BY YEAR

Referência

FROM - Usando PIVOT e UNPIVOT