Heim >Datenbank >MySQL-Tutorial >Wie kann ich Zeilen effizient in Spalten in SQL Server übertragen?

Wie kann ich Zeilen effizient in Spalten in SQL Server übertragen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-25 14:58:11335Durchsuche

How to Efficiently Transpose Rows into Columns in SQL Server?

Konvertieren Sie Zeilen effizient in Spalten in SQL Server

SQL Server bietet mehrere Methoden zum Konvertieren von Daten von Zeilen in Spalten.

PIVOT-Funktion

Die PIVOT-Funktion ermöglicht die direkte Datenkonvertierung mit der folgenden Syntax:

<code class="language-sql">select Firstname, Amount, PostalCode, LastName, AccountNumber
from
(
  select value, columnname
  from yourtable
) d
pivot
(
  max(value)
  for columnname in (Firstname, Amount, PostalCode, LastName, AccountNumber)
) piv;</code>

In Fällen, in denen die Anzahl der Spalten unbekannt ist, kann dynamisches SQL verwendet werden:

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(ColumnName) 
                    from yourtable
                    group by ColumnName, id
                    order by id
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = N'SELECT ' + @cols + N' from 
             (
                select value, ColumnName
                from yourtable
            ) x
            pivot 
            (
                max(value)
                for ColumnName in (' + @cols + N')
            ) p '

exec sp_executesql @query;</code>

Aggregationsfunktionen und CASE-Ausdrücke

Alternativ können Sie Aggregatfunktionen verwenden:

<code class="language-sql">select
  max(case when columnname = 'FirstName' then value end) Firstname,
  max(case when columnname = 'Amount' then value end) Amount,
  max(case when columnname = 'PostalCode' then value end) PostalCode,
  max(case when columnname = 'LastName' then value end) LastName,
  max(case when columnname = 'AccountNumber' then value end) AccountNumber
from yourtable</code>

Mehrere Verbindungen

Mit verknüpften Spalten können mehrere Joins verwendet werden:

<code class="language-sql">select fn.value as FirstName,
  a.value as Amount,
  pc.value as PostalCode,
  ln.value as LastName,
  an.value as AccountNumber
from yourtable fn
left join yourtable a
  on fn.somecol = a.somecol
  and a.columnname = 'Amount'
left join yourtable pc
  on fn.somecol = pc.somecol
  and pc.columnname = 'PostalCode'
left join yourtable ln
  on fn.somecol = ln.somecol
  and ln.columnname = 'LastName'
left join yourtable an
  on fn.somecol = an.somecol
  and an.columnname = 'AccountNumber'
where fn.columnname = 'Firstname'</code>

Das obige ist der detaillierte Inhalt vonWie kann ich Zeilen effizient in Spalten in SQL Server übertragen?. 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