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

Wie kann ich Spalten und Zeilen in SQL einfach transponieren?

Barbara Streisand
Freigeben: 2025-01-23 10:57:10
Original
936 Leute haben es durchsucht

How Can I Easily Transpose Columns and Rows in SQL?

Einfache Implementierung der SQL-Spalten- und Zeilentransposition

In SQL ist es oft notwendig, Zeilen und Spalten auszutauschen. Obwohl PIVOT ein geeignetes Tool zu sein scheint, gibt es Situationen, in denen es übermäßig komplex erscheint. Glücklicherweise gibt es einige einfachere Alternativen, um diese Konvertierung zu erreichen.

Verwenden Sie UNION ALL, Aggregatfunktionen und CASE-Anweisungen

Wenn PIVOT entmutigend erscheint, können Sie UNION ALL in Kombination mit einer Aggregatfunktion und einer CASE-Anweisung verwenden, um seine Funktionalität zu replizieren:

<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

UNPIVOT und PIVOT mit statischen Werten

Wenn Sie die spezifische Spalte und Farbe kennen, die Sie konvertieren möchten, können Sie sie für die statische Ausführung fest codieren:

<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

Verwenden Sie dynamisches UNPIVOT und PIVOT, um unbekannte Werte zu verarbeiten

In Fällen, in denen die Anzahl der Spalten und Farben unbekannt ist, kann dynamisches SQL verwendet werden, um die erforderlichen Listen zu generieren:

<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

Egal für welche Methode Sie sich entscheiden, die Ergebnisse sind die gleichen:

|. NAME |. GRÜN |

|. 3 |. 1 | |. John |. 5 |. 2 | |. Paul |. 1 |. 2 | |. Tim |. 1 |. 9 |

Das obige ist der detaillierte Inhalt vonWie kann ich Spalten und Zeilen in SQL einfach 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