Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjana Lajur Pivot secara Dinamik dalam Pelayan SQL?

Bagaimana untuk Menjana Lajur Pivot secara Dinamik dalam Pelayan SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-07 18:47:41544semak imbas

How to Dynamically Generate Pivot Columns in SQL Server?

Lajur pangsi dinamik dalam Pelayan SQL

Dalam SQL Server, lajur pangsi dinamik membolehkan anda membuat jadual pangsi yang lajurnya berubah berdasarkan nilai dalam jadual lain. Ini berguna apabila bilangan lajur pangsi tidak diketahui terlebih dahulu atau sering berubah.

Pertimbangkan borang berikut:

  • Hartanah: Mengandungi senarai hartanah.
  • PropertyObjects: Pautkan sifat kepada objek dan berikan nilai untuk sifat.

Pernyataan Masalah

Anda ingin mencipta jadual pangsi yang mengandungi satu lajur untuk setiap sifat dalam jadual Harta. Walau bagaimanapun, bilangan sifat mungkin berubah, jadi anda memerlukan cara untuk mendapatkan nama lajur secara dinamik.

Penyelesaian

Untuk mencipta lajur pangsi dinamik, anda boleh menggunakan SQL dinamik dengan klausa PIVOT. Kod berikut menunjukkan satu penyelesaian:

<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

-- 获取作为逗号分隔字符串的唯一属性名称
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(Name)
                      FROM property
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)'), 1, 1, '');

-- 构造动态查询
SET @query =
'SELECT *
FROM
(
  SELECT
    o.object_id,
    p.Name,
    o.value
  FROM PropertyObjects AS o
  INNER JOIN property AS p ON o.Property_Id = p.Id
) AS t
PIVOT 
(
  MAX(value)
  FOR Name IN (' + @cols + ')
) AS p;';

-- 执行动态查询
EXEC(@query);</code>

Keputusan

Pertanyaan dinamik akan mengembalikan jadual pangsi yang mengandungi satu lajur untuk setiap sifat dalam jadual Harta. Nilai dalam jadual pangsi akan menjadi nilai maksimum untuk setiap gabungan atribut-objek.

Sebagai contoh, jika jadual Harta mengandungi sifat berikut:

  • Hartanah1
  • Hartanah2
  • Hartanah3

dan jadual PropertyObjects mengandungi data berikut:

OBJECT_ID PROPERTY_ID VALUE
1 1 ee
1 2 fd
1 3 fdf
1 4 ewre
2 1 dsd
2 2 sss
2 3 dfew
2 4 dff

Pertanyaan dinamik akan mengembalikan jadual pangsi berikut:

OBJECT_ID PROPERTY1 PROPERTY2 PROPERTY3 PROPERTY4
1 ee fd fdf ewre
2 dsd sss dfew dff

Atas ialah kandungan terperinci Bagaimana untuk Menjana Lajur Pivot secara Dinamik 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