在SQL Server中,資料透視表用於透過將行轉換為列來重塑資料。但是,當列名是動態的且事先未知時,手動建立資料透視表就變得具有挑戰性。本文將探討一種透過從表中動態產生透視列來解決此問題的方案。
假設我們有一個Property表,包含以下列:
<code>Id Name</code>
我們還有一個PropertyObjects表,用來儲存特定物件的屬性值:
<code>Id Object_Id Property_Id Value</code>
我們的目標是建立一個資料透視表,其中每列對應Property表中定義的一個屬性,每列顯示對應屬性和物件ID的值。
為了動態產生透視列,我們可以使用以下步驟:
<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>
這將建立一個以逗號分隔的字串@cols,其中包含所有屬性的名稱。
<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>
這將建立一個動態SQL查詢@query,其中包含透視邏輯。
<code class="language-sql">EXEC sp_executesql @query;</code>
執行@query將傳回透視表,其中列名是從Property表動態產生的。
透過上述步驟,我們可以有效地處理動態列名,從而建立靈活且可擴展的資料透視表。 需要注意的是,此方法依賴動態SQL,因此在使用前務必確保資料的安全性,避免SQL注入風險。
以上是如何在 SQL Server 中建立動態資料透視列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!