Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengubah Baris ke Lajur dalam SQL Server?

Bagaimana untuk Mengubah Baris ke Lajur dalam SQL Server?

Mary-Kate Olsen
Lepaskan: 2025-01-05 07:39:40
asal
618 orang telah melayarinya

How to Transpose Rows into Columns in SQL Server?

Menukar Baris ke Lajur dalam SQL Server

Dalam SQL Server, menukar baris ke dalam lajur boleh dicapai melalui pelbagai kaedah. Selain daripada menggunakan kursor untuk membaca baris dan mengisi lajur, pendekatan alternatif wujud untuk transformasi ini.

Satu kaedah yang berkesan ialah pengagregatan bersyarat. Dengan memanfaatkan fungsi MAX() dengan pernyataan CASE, anda boleh menetapkan nilai pada lajur tertentu berdasarkan ID teg, seperti yang dilihat dalam pertanyaan berikut:

SELECT TimeSeconds,
       COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1,
       COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2,
       COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3,
       COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4
  FROM table1
 GROUP BY TimeSeconds
Salin selepas log masuk

Sebagai alternatif, anda boleh memudahkan pertanyaan dengan membenarkan nilai nol bukannya 'n/a':

SELECT TimeSeconds,
       MAX(CASE WHEN TagID = 'A1' THEN Value END) A1,
       MAX(CASE WHEN TagID = 'A2' THEN Value END) A2,
       MAX(CASE WHEN TagID = 'A3' THEN Value END) A3,
       MAX(CASE WHEN TagID = 'A4' THEN Value END) A4
  FROM table1
 GROUP BY TimeSeconds
Salin selepas log masuk

Kaedah lain melibatkan operator PIVOT. Ia membolehkan anda memutarkan baris ke dalam lajur berdasarkan nilai yang ditentukan:

SELECT TimeSeconds, A1, A2, A3, A4
  FROM
(
  SELECT TimeSeconds, TagID, Value
    FROM table1
) s
PIVOT
(
  MAX(Value) FOR TagID IN (A1, A2, A3, A4)
) p
Salin selepas log masuk

Dalam kes di mana nilai ID teg adalah dinamik, SQL dinamik boleh digunakan untuk menjana pertanyaan yang diperlukan. Dengan menggunakan fungsi STUFF() dan FOR XML PATH(), anda boleh membina senarai lajur secara dinamik dan menggunakannya dalam pertanyaan PIVOT:

DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX)

SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID)
            FROM Table1
            ORDER BY 1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @sql = 'SELECT TimeSeconds, ' + @cols + '
              FROM
            (
              SELECT TimeSeconds, TagID, Value
                FROM table1
            ) s
            PIVOT
            (
              MAX(Value) FOR TagID IN (' + @cols + ')
            ) p'

EXECUTE(@sql)
Salin selepas log masuk

Kaedah ini menyediakan cara yang cekap untuk menukar baris ke dalam lajur dalam SQL Pelayan, memenuhi senario berbeza berdasarkan ketersediaan dan sifat nilai ID teg.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Baris ke Lajur dalam SQL Server?. 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