Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Pivot Data dengan Bilangan Lajur Tidak Diketahui dalam SQL Server 2005?

Bagaimana untuk Pivot Data dengan Bilangan Lajur Tidak Diketahui dalam SQL Server 2005?

Patricia Arquette
Lepaskan: 2025-01-13 07:24:42
asal
892 orang telah melayarinya

How to Pivot Data with an Unknown Number of Columns in SQL Server 2005?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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