Rumah >pangkalan data >tutorial mysql >Bagaimana Mudah Mengubah Lajur dan Baris dalam SQL?

Bagaimana Mudah Mengubah Lajur dan Baris dalam SQL?

Linda Hamilton
Linda Hamiltonasal
2025-01-23 11:01:12812semak imbas

How to Easily Transpose Columns and Rows in SQL?

Cara mudah untuk menukar baris dan lajur SQL

Dalam SQL, adalah keperluan biasa untuk menukar data baris dan lajur untuk mendapatkan format data yang lebih praktikal. Walaupun fungsi PIVOT kelihatan rumit, sebenarnya terdapat alternatif yang lebih mudah.

Gunakan UNION ALL, agregat fungsi dan penyata KES

Jika anda tidak boleh menggunakan fungsi PIVOT, anda boleh menggunakan gabungan UNION ALL, fungsi agregat dan pernyataan CASE:

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

Kaedah UNPIVOT dan PIVOT statik

Jika nilai lajur yang hendak ditukar diketahui, anda boleh menggunakan fungsi UNPIVOT dan PIVOT:

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

Kaedah PIVOT Dinamik

Untuk bilangan lajur dan warna yang tidak diketahui, SQL dinamik boleh digunakan:

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

Atas ialah kandungan terperinci Bagaimana Mudah Mengubah Lajur dan Baris dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn