terça-feira, 20 de novembro de 2012
Pivot e UNPIVOT
Se você já trabalhou com o Microsoft Access, você poderia ter usado a instrução TRANSFORM para criar uma consulta de referência cruzada. Mesmo que a funcionalidade semelhante foi perdida no SQL Server 2000, podemos conseguir o mesmo no SQL Server 2005, através do operador PIVOT com a instrução SELECT. O operador PIVOT pode ser usado para transformar um conjunto de linhas em colunas, enquanto o operador UNPIVOT complementa o operador PIVOT, permitindo-lhe girar as colunas em linhas.
Aqui está um exemplo
DECLARE @ tabela tblStudents (
INT IDENTITY StudentID,
StudentName VARCHAR (100),
CollegeName VARCHAR (100),
JoinedOn DATETIME
)
INSERT INTO @ tblStudents
SELECT 'Zero', 'College_One', '20010101 '
UNION ALL
SELECT 'One', 'College_One', '20010102 '
UNION ALL
SELECT 'Dois', 'College_One', '20010202 '
UNION ALL
SELECT 'três', 'College_Two', '20010202 '
UNION ALL
SELECT 'Quatro', 'College_One', '20020302 '
UNION ALL
SELECT 'Five', 'College_One', '20030202 '
UNION ALL
SELECT 'Seis', 'College_Two', '20040202 '
UNION ALL
SELECT 'Seven', 'College_Two', '20040202 '
UNION ALL
SELECT 'Oito', 'College_Three', '20040202 '
SELECT *
DE @ tblStudents
SELECIONE CollegeName,
[2001] AS Yr2001,
[2002] AS Yr2002,
[2003] AS Yr2003,
[2004] AS Yr2004
FROM (SELECT StudentName,
CollegeName,
ANO (JoinedOn) Yr
DE @ tblStudents) st
PIVOT (Contagem (StudentName) PARA Yr IN ([2001], [2002], [2003], [2004])) tp
Aqui está outro exemplo
Exemplo2
USE AdventureWorks
SELECT EmployeeID,
[2002] Yr2002,
[2003] Yr2003,
[2004] Yr2004
FROM (SELECT year OrderYear (OrderDate),
EmployeeID,
TotalDue
DE Purchasing.PurchaseOrderHeader) poh
PIVOT (SUM (TotalDue) PARA OrderYear IN ([2002], [2003], [2004])) pvt
ORDER BY EmployeeID
Exemplo 3:
DECLARE @ TABELA guia (id INT IDENTITY, estado VARCHAR (1000))
INSERT INTO @ Tab SELECT 'Concluído'
INSERT INTO Tab @ SELECT 'Enviado'
INSERT INTO 'InProgress' @ guia Selecionar
INSERT INTO Tab @ SELECT 'Enviado'
INSERT INTO @ Tab SELECT 'Concluído'
SELECT [Submitted], [Concluído], [InProgress]
FROM (
Selecione Status, COUNT (*) cnt
DE Tab @
GROUP BY Estado) t
PIVOT (SUM (CNT) para o status IN ([Enviado], [Concluído], [InProgress])) uma
...
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário