MSSQL·UNPIVOT關鍵字實現行轉列


閱文時長 | 0.74分鍾 字數統計 | 1185.6字符
主要內容 | 1、引言&背景 2、UNPIVOT基本語法結構 3、數據准備&行轉列實現 4、聲明與參考資料
『MSSQL·UNPIVOT關鍵字實現行轉列』
編寫人 | SCscHero 編寫時間 | 2021/8/14 PM9:27
文章類型 | 系列 完成度 | 已完成
座右銘 每一個偉大的事業,都有一個微不足道的開始。

一、引言&背景   完成度:100%

a) 應對問題

UNPIVOT關鍵字如何實現行轉列?

b) 應對場景

  1. 如圖,員工第一季度工資表,實現行轉列。以單表的多個字段拆分成多行數據。
  1. 仍適用於多字段存儲同級數據的,例如學生成績表,按學生維度存儲各科學習成績。

二、UNPIVOT基本語法結構   完成度:100%

UNPIVOT語法結構如下:

-- UNPIVOT 語法
SELECT [columns not unpivoted],
     [unpivot_column],
       [value_column],
FROM
(<source query>)
AS <alias for the source data>
UNPIVOT ( [value_column] FOR [unpivot_column] IN ( <column_list> ) ) 
   AS <alias for unpivot>

--[columns not unpivoted]: 固定列,即不經過轉換的,直接查出來的列。
--[unpivot_column]: 需要被拆分的列名稱。
--[value_column]: 需要被拆分的列對應的值。
--<source query>: 數據結果集。
--<alias for the source data>: 數據結果集別名,必須結構,可省略AS。
--<column_list>:  需要被拆分的各列的名稱。
--<alias for unpivot>: 行轉列過程結果集的別名,必須結構,可省略AS。

三、數據准備&行轉列實現   完成度:100%

a) 數據准備


--示例:員工工資表
USE SCscHero_001_SSMSCode

CREATE TABLE [dbo].[實戰設計_002_PIVOT實現行轉列]
(
    [EID] INT NOT NULL PRIMARY KEY IDENTITY, 
    [EName] NCHAR(10) NULL, 
    [Year] NCHAR(10) NULL,
    [JanuaryMoney] DECIMAL NULL, 
    [FebruaryMoney] DECIMAL NULL, 
    [MarMoney] DECIMAL NULL,
)

INSERT INTO 實戰設計_002_PIVOT實現行轉列 VALUES(N'張三', '2021', 10, 0, 90);
INSERT INTO 實戰設計_002_PIVOT實現行轉列 VALUES(N'趙四', '2021', 10, 0, 60);
INSERT INTO 實戰設計_002_PIVOT實現行轉列 VALUES(N'王五', '2021', 10, 0, 80);
INSERT INTO 實戰設計_002_PIVOT實現行轉列 VALUES(N'李六', '2021', 10, 0, 30);
INSERT INTO 實戰設計_002_PIVOT實現行轉列 VALUES(N'田七', '2021', 10, 0, NULL);
INSERT INTO 實戰設計_002_PIVOT實現行轉列 VALUES(N'速八', '2021', 10, 0, 34);
INSERT INTO 實戰設計_002_PIVOT實現行轉列 VALUES(N'玖九', '2021', 10, 0, 8);

數據如下圖:

b) 行轉列實現

SELECT T.EID, T.EName, T.Year, --[columns not unpivoted]
    T.Month, --[unpivot_column]
    T.Money --[value_column]
FROM(SELECT * FROM dbo.實戰設計_002_PIVOT實現行轉列) AS UP
    UNPIVOT([Money]
            FOR --[value_column]
            [Month] --[unpivot_column] 
            IN([JanuaryMoney], [FebruaryMoney], [MarMoney]) --column_list
    ) AS T;

四、聲明與參考資料   完成度:100%

原創博文,未經許可請勿轉載。

如有幫助,歡迎點贊、收藏、關注。如有問題,請評論留言!如需與博主聯系的,直接博客私信SCscHero即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM