首頁 > 資料庫 > mysql教程 > 如何在SQL Server中動態產生資料透視列?

如何在SQL Server中動態產生資料透視列?

Mary-Kate Olsen
發布: 2025-01-07 18:47:41
原創
543 人瀏覽過

How to Dynamically Generate Pivot Columns in SQL Server?

SQL Server中的動態透視列

在SQL Server中,動態透視列可讓您建立透視表,其列會根據另一個表中的值而變化。當透視列的數量事先未知或頻繁變化時,這非常有用。

考慮以下表格:

  • 屬性 (Property): 包含屬性清單。
  • 屬性物件 (PropertyObjects): 將屬性連結到物件並為屬性提供值。

問題陳述

您想要建立一個透視表,該表為屬性 (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)表包含以下屬性:

  • Property1
  • Property2
  • Property3

屬性物件 (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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板