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
Freigeben: 2025-01-25 14:58:11
Original
332 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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