SQL Server 2005 Dynamic Pivot
Dalam SQL Server 2005, operasi pangsi dengan bilangan lajur yang tidak diketahui boleh menjadi rumit. Artikel ini meneroka penyelesaian kepada masalah sedemikian.
Soalan:
Bagaimana untuk memutar data secara dinamik dengan bilangan lajur yang tidak diketahui dalam SQL Server 2005? Output yang diingini harus menyerupai jadual dengan pelajar unik sebagai baris, lajur dinamik mewakili tugasan dan diisih mengikut tarikh tamat. Jika boleh, lajur "Jumlah" akan dipaparkan yang terakhir.
Jawapan:
Disebabkan pengehadan SQL Server 2005, mungkin perlu menggunakan SQL dinamik untuk melaksanakan pangsi dinamik. Satu penyelesaian yang mungkin adalah untuk memanfaatkan pandangan pengurusan dinamik (DMV) dan XML untuk menjana pernyataan SQL dinamik.
<code class="language-sql">DECLARE @DynamicSQL NVARCHAR(MAX) = N''; -- 从表中获取不同的作业名称 SELECT DISTINCT AssignmentName INTO #AssignmentNames FROM TableName; -- 循环遍历作业名称 SELECT @DynamicSQL = @DynamicSQL + ' MAX(CASE WHEN AssignmentName = ''' + AssignmentName + ''' THEN Grade END) AS ' + AssignmentName + ',' FROM #AssignmentNames; -- 删除动态 SQL 语句末尾的逗号 SET @DynamicSQL = LEFT(@DynamicSQL, LEN(@DynamicSQL) - 1); -- 构造用于透视的最终动态 SQL 语句 SET @DynamicSQL = 'SELECT StudentName, ' + @DynamicSQL + ' FROM TableName GROUP BY StudentName;'; -- 执行动态 SQL 语句 EXEC sp_executesql @DynamicSQL;</code>
Kaedah ini menjana pernyataan SQL dinamik yang mengandungi lajur yang diperlukan untuk berputar berdasarkan nama kerja berbeza yang dikenal pasti dalam jadual.
Nota:
Walaupun penyelesaian ini melibatkan SQL dinamik, ia tidak terdedah kepada serangan suntikan kerana pernyataan SQL dibina daripada data yang diketahui dan dipercayai. Sebagai alternatif, jika data kerap berubah, pertimbangkan untuk melaksanakan penjanaan kod untuk mencipta prosedur tersimpan dengan pernyataan SQL yang diperlukan.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Secara Dinamik dengan Lajur Tidak Diketahui dalam SQL Server 2005?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!