einfache Möglichkeit, SQL -Ränge und -kolumnen zu konvertieren
]Während die Pivot-Funktion von SQL für die Umwandlung von Zeilen und Säulen geeignet zu sein scheint, kann seine Komplexität unerschwinglich sein. Wenn Sie dies auf einfachere Weise erreichen möchten, sollten Sie die folgende Alternative berücksichtigen:
Verwenden Sie Union All, aggregierte Funktionen und Fallanweisungen
Diese Methode verwendet Union alle, um die Daten zu erweitern, und verwendet dann die Aggregat -Funktion und die Fallanweisung für die Perspektive:
SELECT name,
SUM(CASE WHEN color = 'Red' THEN value ELSE 0 END) AS Red,
SUM(CASE WHEN color = 'Green' THEN value ELSE 0 END) AS Green,
SUM(CASE WHEN color = 'Blue' THEN value ELSE 0 END) AS Blue
FROM
(
SELECT color, Paul AS value, 'Paul' AS name
FROM yourTable
UNION ALL
SELECT color, John AS value, 'John' AS name
FROM yourTable
UNION ALL
SELECT color, Tim AS value, 'Tim' AS name
FROM yourTable
UNION ALL
SELECT color, Eric AS value, 'Eric' AS name
FROM yourTable
) AS src
GROUP BY name
statische Dekonstruktion und Perspektive
]]Wenn Sie den Wert kennen, den Sie konvertieren möchten, verwenden Sie hartcodierte Werte für die Dekonstruktion und Perspektive:
SELECT name, [Red], [Green], [Blue]
FROM
(
SELECT color, name, value
FROM yourTable
UNPIVOT
(
value FOR name IN (Paul, John, Tim, Eric)
) AS unpiv
) AS src
PIVOT
(
SUM(value)
FOR color IN ([Red], [Green], [Blue])
) AS piv
dynamische Perspektive
]]Für unbekannte Anzahl von Spalten und Farben generieren Sie dynamische SQL, um eine dekonstruierte und perspektivische Liste zu generieren:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@colsPivot AS NVARCHAR(MAX)
SELECT @colsUnpivot = STUFF((SELECT ',' QUOTENAME(C.name)
FROM sys.columns AS C
WHERE C.object_id = OBJECT_ID('yourtable') AND
C.name 'color'
FOR XML PATH('')), 1, 1, '')
SELECT @colsPivot = STUFF((SELECT ','
QUOTENAME(color)
FROM yourtable AS t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '')
SET @query = 'SELECT name, ' @colsPivot '
FROM (
SELECT color, name, value
FROM yourtable
UNPIVOT
(
value FOR name IN (' @colsUnpivot ')
) AS unpiv
) AS src
PIVOT
(
SUM(value)
FOR color IN (' @colsPivot ')
) AS piv'
EXEC(@query)
Alle drei Methoden ergeben die folgenden Ergebnisse:
RED | GREEN | BLUE | |
---|---|---|---|
Eric | 3 | 5 | |
John | ] | 54 | |
9 |
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3