PIVOT e UNPIVOT

Da Webmobili Wiki.
Versione del 15 gen 2025 alle 18:25 di SimoneVincenzi (discussione | contributi) (Creata pagina con "La '''PIVOT''' è una funzione che consente di trasformare le righe in colonne. Vediamo un esempio con la tabella <code>LocalizedProperty</code> <syntaxhighlight lang="sql"> 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(LocaleV...")
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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