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

Bagaimana Mudah Mengubah Lajur dan Baris dalam SQL?

Linda Hamilton
Lepaskan: 2025-01-23 11:01:12
asal
795 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan