Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memindahkan Baris ke Lajur dengan Cekap dalam Pelayan SQL?

Bagaimanakah Saya Boleh Memindahkan Baris ke Lajur dengan Cekap dalam Pelayan SQL?

Barbara Streisand
Barbara Streisandasal
2025-01-05 00:25:42171semak imbas

How Can I Efficiently Transpose Rows to Columns in SQL Server?

Memindahkan Baris ke Lajur dalam SQL Server

Memindahkan baris ke lajur dalam SQL Server ialah tugas biasa apabila bekerja dengan data yang disimpan dalam format jadual. Secara tradisinya, ini telah dicapai menggunakan kursor, yang boleh memakan masa dan tidak cekap. Artikel ini meneroka kaedah alternatif untuk transposisi baris, menawarkan penyelesaian yang elegan dan berprestasi.

Pengagregatan Bersyarat

Satu pendekatan ialah menggunakan pengagregatan bersyarat, yang memanfaatkan fungsi COALESCE() untuk menangani kehilangan nilai.

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

Pertanyaan ini menjana output dengan nilai pemegang tempat ('n/a') kerana kehilangan data.

PIVOT

Pilihan lain ialah menggunakan fungsi PIVOT, yang membolehkan penciptaan lajur dinamik.

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

Ini pendekatan menjana output dengan nilai NULL untuk data yang hilang.

SQL Dinamik

Jika bilangan lajur tidak tetap dan mesti ditentukan secara dinamik, SQL dinamik boleh digunakan.

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)

Pertanyaan ini membina pernyataan PIVOT dinamik berdasarkan nilai TagID unik dalam jadual.

Kaedah ini menyediakan penyelesaian yang cekap dan boleh disesuaikan untuk menukar baris ke lajur dalam SQL Server. Dengan memilih pendekatan yang sesuai berdasarkan ciri data dan keperluan prestasi, anda boleh memudahkan tugas manipulasi data dan meningkatkan kecekapan pelaksanaan pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memindahkan Baris ke Lajur dengan Cekap dalam Pelayan 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