PIVOT e UNPIVOT: differenze tra le versioni

Da Webmobili Wiki.
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..."
 
Nessun oggetto della modifica
 
Riga 46: Riga 46:
GROUP BY EntityId
GROUP BY EntityId
</syntaxhighlight>
</syntaxhighlight>
Tra i 2 scenari vince la <code>PIVOT</code> quando ci sono tanti dati, altrimenti sono simili.

Versione attuale delle 18:28, 15 gen 2025

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.