PIVOT e UNPIVOT
Da Webmobili Wiki.
La PIVOT è una funzione che consente di trasformare le righe in colonne.
Vediamo un esempio con la tabella LocalizedProperty
SELECT
EntityId,
[Name],
[Description],
[ShortDescription],
[MetaTitle],
[MetaDescription],
[SeoName],
[SeoDescription]
FROM (
SELECT
EntityId,
LocaleKey,
LocaleValue
FROM LocalizedProperty
WHERE LocaleKeyGroup = 'Category' AND LanguageId = 1) AS SourceTable
PIVOT (
MAX(LocaleValue)
FOR LocaleKey IN (
[Name],
[Description],
[ShortDescription],
[MetaTitle],
[MetaDescription],
[SeoName],
[SeoDescription])) AS PivotTable
Lo stesso esempio si può riprodurre utilizzando le funzioni CASE + MAX
SELECT
EntityId,
MAX(CASE WHEN LocaleKey = 'Name' THEN LocaleValue END) AS [Name],
MAX(CASE WHEN LocaleKey = 'Description' THEN LocaleValue END) AS [Description],
MAX(CASE WHEN LocaleKey = 'ShortDescription' THEN LocaleValue END) AS [ShortDescription],
MAX(CASE WHEN LocaleKey = 'MetaTitle' THEN LocaleValue END) AS [MetaTitle],
MAX(CASE WHEN LocaleKey = 'MetaDescription' THEN LocaleValue END) AS [MetaDescription],
MAX(CASE WHEN LocaleKey = 'SeoName' THEN LocaleValue END) AS [SeoName],
MAX(CASE WHEN LocaleKey = 'SeoDescription' THEN LocaleValue END) AS [SeoDescription]
FROM LocalizedProperty
WHERE LocaleKeyGroup = 'Category' AND LanguageId = 1
GROUP BY EntityId
Tra i 2 scenari vince la PIVOT quando ci sono tanti dati, altrimenti sono simili.