在SQL Server中,動態透視列可讓您建立透視表,其列會根據另一個表中的值而變化。當透視列的數量事先未知或頻繁變化時,這非常有用。
考慮以下表格:
您想要建立一個透視表,該表為屬性 (Property)表中的每個屬性包含一列。但是,屬性的數量可能會發生變化,因此您需要一種方法來動態取得列名。
要建立動態透視列,您可以結合使用動態SQL和PIVOT子句。以下程式碼示範了一種解決方案:
<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>
動態查詢將傳回透視表,其中包含屬性 (Property)表中每個屬性的一列。透視表中的值將是每個屬性-物件組合的最大值。
例如,如果屬性 (Property)表包含以下屬性:
且屬性物件 (PropertyObjects)表包含以下資料:
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 |
動態查詢將傳回以下透視表:
OBJECT_ID | PROPERTY1 | PROPERTY2 | PROPERTY3 | PROPERTY4 |
---|---|---|---|---|
1 | ee | fd | fdf | ewre |
2 | dsd | sss | dfew | dff |
以上是如何在SQL Server中動態產生資料透視列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!