Heim > Datenbank > MySQL-Tutorial > Wie kann ich Spalten und Zeilen in SQL effizient transponieren?

Wie kann ich Spalten und Zeilen in SQL effizient transponieren?

Linda Hamilton
Freigeben: 2025-01-23 09:47:14
Original
734 Leute haben es durchsucht

How Can I Efficiently Transpose Columns and Rows in SQL?

SQL-Spalten- und Zeilentransposition: Ein praktischer Leitfaden

SQL erfordert häufig das Transponieren von Daten – das Konvertieren der Tabellenausrichtung von vertikal (Spalten) in horizontal (Zeilen) oder umgekehrt. Obwohl der Befehl PIVOT vorhanden ist, kann er umständlich sein. In diesem Leitfaden werden einfachere Alternativen untersucht.

Methode 1: UNION ALL-, Aggregate- und CASE-Anweisung

Dieser Ansatz verwendet UNION ALL zum Entpivotieren, dann eine Aggregatfunktion (hier SUM) und eine CASE-Anweisung zum erneuten Pivotieren:

<code class="language-sql">select name,
  sum(case when color = 'Red' then value else 0 end) Red,
  sum(case when color = 'Green' then value else 0 end) Green,
  sum(case when color = 'Blue' then value else 0 end) Blue
from
(
  select color, Paul value, 'Paul' name
  from yourTable
  union all
  select color, John value, 'John' name
  from yourTable
  union all
  select color, Tim value, 'Tim' name
  from yourTable
  union all
  select color, Eric value, 'Eric' name
  from yourTable
) src
group by name</code>
Nach dem Login kopieren

Methode 2: Statisch UNPIVOT und PIVOT

Die Kenntnis der Anzahl der zu transformierenden Spalten ermöglicht eine statische UNPIVOT und PIVOT Lösung:

<code class="language-sql">select name, [Red], [Green], [Blue]
from
(
  select color, name, value
  from yourtable
  unpivot
  (
    value for name in (Paul, John, Tim, Eric)
  ) unpiv
) src
pivot
(
  sum(value)
  for color in ([Red], [Green], [Blue])
) piv</code>
Nach dem Login kopieren

Methode 3: Dynamischer Pivot für variable Spalten

Beim Umgang mit einer dynamischen Anzahl von Spalten und Farben bietet dynamisches SQL eine Lösung:

<code class="language-sql">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 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+')
        ) unpiv
      ) src
      pivot
      (
        sum(value)
        for color in ('+@colsPivot+')
      ) piv'

exec(@query)</code>
Nach dem Login kopieren

Diese Methoden bieten vielseitige Ansätze zur Datentransposition in SQL und passen sich an verschiedene Datenmanipulationsanforderungen an.

Das obige ist der detaillierte Inhalt vonWie kann ich Spalten und Zeilen in SQL effizient transponieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage