Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengubah Lajur dan Baris dengan Mudah dalam SQL?

Bagaimanakah Saya Boleh Mengubah Lajur dan Baris dengan Mudah dalam SQL?

Barbara Streisand
Barbara Streisandasal
2025-01-23 10:57:10936semak imbas

How Can I Easily Transpose Columns and Rows in SQL?

Melaksanakan transposisi lajur dan baris SQL dengan mudah

Dalam SQL, selalunya perlu menukar baris dan lajur. Walaupun PIVOT kelihatan seperti alat yang sesuai, terdapat situasi di mana ia kelihatan terlalu rumit. Nasib baik, terdapat beberapa alternatif yang lebih mudah untuk mencapai penukaran ini.

Gunakan UNION ALL, fungsi agregat dan pernyataan CASE

Jika PIVOT kelihatan menakutkan, anda boleh menggunakan UNION ALL digabungkan dengan fungsi agregat dan pernyataan CASE untuk meniru fungsinya:

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

UNPIVOT dan PIVOT menggunakan nilai statik

Jika anda tahu lajur dan warna tertentu yang ingin anda tukar, anda boleh kod keras untuk pelaksanaan statik:

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

Gunakan UNPIVOT dan PIVOT dinamik untuk mengendalikan nilai yang tidak diketahui

Untuk kes di mana bilangan lajur dan warna tidak diketahui, SQL dinamik boleh digunakan untuk menjana senarai yang diperlukan:

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

Tidak kira kaedah yang anda pilih, hasilnya adalah sama:

|. NAMA |. BIRU |

|. Eric |. 5 | |. John |. 4 | |. Paul |. 8 | |. 1 |. 9 |

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Lajur dan Baris dengan Mudah 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