Pengendalian Data Pangsi Bilangan Lajur Tidak Diketahui dalam SQL Server 2005
Artikel ini meneroka cabaran berputar dalam mengendalikan data dengan bilangan lajur yang tidak diketahui dalam SQL Server 2005. Set data yang diberikan mengandungi lajur pembolehubah yang mewakili tugasan dan gred, dan output yang dikehendaki ialah jadual pangsi yang mengandungi lajur untuk tugasan dan jumlah markah pelajar.
Disebabkan oleh pengehadan SQL Server 2005, penyelesaian SQL tulen (tiada SQL dinamik) tidak mungkin untuk tugas ini. Seperti yang dinyatakan dalam jawapan yang dicadangkan, SQL dinamik menyediakan cara untuk menjana kenyataan yang diperlukan secara dinamik berdasarkan data semasa.
Sebagai contoh, jika jadual bernama Tugasan mengandungi nama tugasan dan tarikh akhir:
<code class="language-sql">CREATE TABLE Assignments ( ID int NOT NULL, AssignmentName varchar(50) NOT NULL, DueDate datetime );</code>
dan data:
<code class="language-sql">INSERT INTO Assignments (ID, AssignmentName, DueDate) VALUES (1, 'Assignment 1', '2023-03-01'), (2, 'Assignment 2', '2023-04-01'), (3, 'Assignment 3', '2023-05-01');</code>
Output yang diperlukan boleh dijana menggunakan SQL dinamik berikut:
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SET @cols = (SELECT STUFF(( SELECT ',[' + AssignmentName + ']' FROM Assignments FOR XML PATH(''), TYPE ), 1, 1, '')); SET @query = 'SELECT StudentName, ' + @cols + ', SUM(Grade) OVER (PARTITION BY StudentName) AS Total FROM (SELECT StudentName, AssignmentName, CASE WHEN AssignmentName = ''Total'' THEN NULL ELSE Grade END AS Grade FROM YourTable) AS t PIVOT (MAX(Grade) FOR AssignmentName IN (' + @cols + ')) AS pvt'; EXECUTE(@query);</code>
Ini akan membuat jadual pangsi dengan lajur tugasan dan jumlah markah pelajar, diisih mengikut tarikh tamat (jika lajur Tarikh Akhir wujud dalam jadual).
Atas ialah kandungan terperinci Bagaimana untuk Pivot Data dengan Bilangan Lajur Tidak Diketahui dalam SQL Server 2005?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!