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

Wie kann man Spalten und Zeilen in SQL einfach transponieren?

Linda Hamilton
Linda HamiltonOriginal
2025-01-23 11:01:12794Durchsuche

How to Easily Transpose Columns and Rows in SQL?

Einfache Möglichkeit, SQL-Zeilen und -Spalten zu konvertieren

In SQL ist es eine häufige Anforderung, Zeilen- und Spaltendaten zu konvertieren, um ein praktischeres Datenformat zu erhalten. Obwohl die PIVOT-Funktion kompliziert aussieht, gibt es tatsächlich einfachere Alternativen.

Verwenden Sie UNION ALL, Aggregatfunktionen und CASE-Anweisungen

Wenn Sie die PIVOT-Funktion nicht verwenden können, können Sie eine Kombination aus UNION ALL, Aggregatfunktionen und CASE-Anweisungen verwenden:

<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>

Statische UNPIVOT- und PIVOT-Methoden

Wenn der zu konvertierende Spaltenwert bekannt ist, können Sie die Funktionen UNPIVOT und PIVOT verwenden:

<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>

Dynamische PIVOT-Methode

Für eine unbekannte Anzahl von Spalten und Farben kann dynamisches SQL verwendet werden:

<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>

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

Stellungnahme:
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