„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man Spalten und Zeilen in SQL effizient übertragen?

Wie kann man Spalten und Zeilen in SQL effizient übertragen?

Gepostet am 2025-03-25
Durchsuche:896

How to Efficiently Transpose Columns and Rows in SQL?

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:

NAMEREDGREEN1John 5 4 2
BLUE
Eric35
]
9
Neuestes Tutorial Mehr>

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