SQL Server 中的資料透視表和連接列
轉換資料庫表以更有條理、更有意義的方式顯示資料對於數據來說通常是必要的分析和演示。在這種特定情況下,目標是從資料庫表建立一個“資料透視表”,其中 TYPE 和 SUBTYPE 列連接成新列,並且 COUNT 值由 ID 和 MONTH 列聚合。
理解 PIVOT 運算符
SQL Server 提供了 PIVOT 運算符,它可讓您將資料從面向行的格式轉換為面向列的格式。它允許您按一列或多列對資料進行分組,並根據另一列中的值建立新列。
動態產生資料透視列
在給定場景中,可能有「100」個TYPE 和SUBTYPE 組合,這使得對資料透視列進行硬編碼是不切實際的。為了克服這個問題,可以使用動態 SQL 根據 TYPE 和 SUBTYPE 值的唯一組合產生資料透視列清單。
動態SQL 實作
以下SQL程式碼示範如何動態產生資料透視列並執行PIVOT操作:
DECLARE @sql AS NVARCHAR(MAX); DECLARE @pivot_list AS NVARCHAR(MAX) = NULL; -- Leave NULL for COALESCE technique DECLARE @select_list AS NVARCHAR(MAX) = NULL; -- Leave NULL for COALESCE technique -- Build the pivot column list and select list SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']', @select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']' FROM ( SELECT DISTINCT TYPE + '_' + SUBTYPE AS PIVOT_CODE FROM YourTableName ) AS PIVOT_CODES; -- Generate the dynamic SQL query SET @sql = ' WITH P AS ( SELECT ID, [MONTH], TYPE + ''_'' + SUBTYPE AS PIVOT_CODE, SUM(COUNT) AS [COUNT] FROM YourTableName GROUP BY ID, [MONTH], TYPE + ''_'' + SUBTYPE ) SELECT ID, [MONTH], ' + @select_list + ' FROM P PIVOT ( SUM([COUNT]) FOR PIVOT_CODE IN ( ' + @pivot_list + ' ) ) AS PVT'; -- Execute the dynamic SQL query EXEC (@sql);
好處使用動態SQL
透過使用動態SQL,資料透視列會自動生成,無需手動串聯。這種方法很靈活,可以應用於具有多種 TYPE 和 SUBTYPE 組合的表。
注意:
上面的程式碼使用 COALESCE 函數來連接透視列清單並選擇清單。或者,您可以根據需要手動指定串聯運算符(',' 或 ';')。
以上是如何在 SQL Server 中動態建立具有連線列的資料透視表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!