Dalam Pelayan SQL, Jadual Pangsi digunakan untuk membentuk semula data dengan menukar baris kepada lajur. Walau bagaimanapun, apabila nama lajur adalah dinamik dan tidak diketahui terlebih dahulu, mencipta jadual pangsi secara manual menjadi mencabar. Artikel ini meneroka penyelesaian kepada masalah ini dengan menjana lajur pangsi secara dinamik daripada jadual.
Andaikan kita mempunyai jadual Harta dengan lajur berikut:
<code>Id Name</code>
Kami juga mempunyai jadual PropertyObjects yang menyimpan nilai hartanah untuk objek tertentu:
<code>Id Object_Id Property_Id Value</code>
Matlamat kami adalah untuk mencipta jadual pangsi di mana setiap lajur sepadan dengan atribut yang ditakrifkan dalam jadual Harta dan setiap lajur memaparkan nilai atribut dan ID objek yang sepadan.
Untuk menjana lajur pangsi secara dinamik, kita boleh menggunakan langkah berikut:
<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, '');</code>
Ini akan mencipta rentetan dipisahkan koma @cols yang mengandungi nama semua sifat.
<code class="language-sql">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;';</code>
Ini akan membina pertanyaan SQL dinamik @query yang mengandungi logik pangsi.
<code class="language-sql">EXEC sp_executesql @query;</code>
Melaksanakan @query akan mengembalikan jadual pangsi dengan nama lajur yang dijana secara dinamik daripada jadual Harta.
Dengan langkah di atas, kami boleh mengendalikan nama lajur dinamik dengan berkesan untuk mencipta jadual pangsi yang fleksibel dan berskala. Perlu diingatkan bahawa kaedah ini bergantung pada SQL dinamik, jadi pastikan anda memastikan keselamatan data sebelum digunakan untuk mengelakkan risiko suntikan SQL.
Atas ialah kandungan terperinci Bagaimana untuk Membuat Lajur Pivot Dinamik dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!