Реферат: Новые возможности T-SQL в MS SQL Server 2005

DELETE [Queue] FROM [Queue] AS Q1

INNER JOIN @Queue AS Q2 ON Q1.QueueID = Q2.QueueID

SELECT * FROM @Queue

Функции PIVOT и UNPIVOT

Магазин ноутбуков с успехом использует демонстрационную базу данных в течение многих лет, и накопил огромную статистику по продажам ноутбуков. Естественно желание знать, для сравнения, объемы продаж за разные годы и общую сумму прибыли. Для того, чтобы из таблиц Orders и Products получить интересующую владельцев магазина информацию лучшим способом является использование ключевого функции PIVOT, позволяющей как бы «развернуть» данные в таблице.

SELECT Model, [2005], [2004] FROM (

SELECT P.Model, DATEPART(year, O.[Date]) AS [Year], O.Quantity FROM Orders O

INNER JOIN Products P ON P.ProductID = O.ProductID

) AS C

PIVOT (SUM(Quantity) FOR [Year] IN ([2005], [2004])) AS PVT

С использованием виртуального представления код можно написать несколько иначе:

WITH C(Model, [Year], Quantity) AS (

SELECT P.Model, DATEPART(year, O.[Date]) AS [Year], O.Quantity FROM Orders O

INNER JOIN Products P ON P.ProductID = O.ProductID

)

SELECT Model, [2005], [2004] FROM C

PIVOT (SUM(Quantity) FOR [Year] IN ([2005], [2004])) AS PVT

Результатом выполнения данного кода в демонстрационной базе данных будет таблицу с тремя колонками: Model, 2005 и 2004. Например:

Model 2005 2004

-----------------------------------

A75-S206 10 24

M40-110 17 38

S215SR 2 10

T2XRP 35 12

V6800V 12 4

В предыдущих версиях SQL Server, где не была реализована функция PIVOT и CTE, чтобы достичь требуемого результата, пришлось бы писать код вроде приведенного ниже.

SELECT C.Model,

SUM(CASE C.[Year] WHEN 2005 THEN C.Quantity ELSE 0 END) AS [2005],

SUM(CASE C.[Year] WHEN 2004 THEN C.Quantity ELSE 0 END) AS [2004]

К-во Просмотров: 554
Бесплатно скачать Реферат: Новые возможности T-SQL в MS SQL Server 2005