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.