mssql 数据库表行转列,列转行终极方案

2023年 4月 17日 48.1k 0

复制代码 代码如下: --行转列问题 --建立測試環境 Create Table TEST (DATES Varchar(6), EMPNO Varchar(5), STYPE Varchar(1), AMOUNT Int) --插入數據 Insert TEST Select '200605', '02436', 'A', 5 Union All Select '200605', '0

复制代码 代码如下: --行转列问题 --建立測試環境 Create Table TEST (DATES Varchar(6), EMPNO Varchar(5), STYPE Varchar(1), AMOUNT Int) --插入數據 Insert TEST Select '200605', '02436', 'A', 5 Union All Select '200605', '02436', 'B', 3 Union All Select '200605', '02436', 'C', 3 Union All Select '200605', '02436', 'D', 2 Union All Select '200605', '02436', 'E', 9 Union All Select '200605', '02436', 'F', 7 Union All Select '200605', '02436', 'G', 6 Union All Select '200605', '02438', 'A', 7 Union All Select '200605', '02438', 'B', 8 Union All Select '200605', '02438', 'C', 0 Union All Select '200605', '02438', 'D', 3 Union All Select '200605', '02438', 'E', 4 Union All Select '200605', '02438', 'F', 5 Union All Select '200605', '02438', 'G', 1 GO --測試 --如果STYPE固定,可以這麼寫 Select DATES, EMPNO, SUM(Case STYPE When 'A' Then AMOUNT Else 0 End) As A, SUM(Case STYPE When 'B' Then AMOUNT Else 0 End) As B, SUM(Case STYPE When 'C' Then AMOUNT Else 0 End) As C, SUM(Case STYPE When 'D' Then AMOUNT Else 0 End) As D, SUM(Case STYPE When 'E' Then AMOUNT Else 0 End) As E, SUM(Case STYPE When 'F' Then AMOUNT Else 0 End) As F, SUM(Case STYPE When 'G' Then AMOUNT Else 0 End) As G From TEST Group By DATES,EMPNO Order By DATES,EMPNO --如果STYPE不固定,用動態語句 Declare @S Varchar(1000) Set @S='' Select @S=@S+',SUM(Case STYPE When '''+STYPE+''' Then AMOUNT Else 0 End) As '+STYPE From (Select Distinct STYPE From TEST) A Order By STYPE Set @S='Select DATES,EMPNO'+@S+' From TEST Group By DATES,EMPNO Order By DATES,EMPNO' EXEC(@S) GO --如果被转置的是数字类型的话,应用下列语句 DECLARE @S VARCHAR(1000) SET @S='SELECT DATES,EMPNO ' SELECT @S=@S+',['+STYPE+']=SUM(CASE WHEN STYPE='''+STYPE+''' THEN AMOUNT ELSE 0 END)' FROM (Select Distinct STYPE From TEST) A Order By STYPE SET @S=@S+' FROM TEST GROUP BY DATES,EMPNO' EXEC(@S) 如果是列转行的话直接Union All就可以了 例如 : city style color 46 48 50 52 长沙 S6MF01002 152 1 2 2 1 长沙 S6MF01002 201 1 2 2 1 上面到下面的样子 city style color size qty 长沙 S6MF01002 152 46 1 长沙 S6MF01002 152 48 2 长沙 S6MF01002 152 50 2 长沙 S6MF01002 152 52 1 长沙 S6MF01002 201 46 1 长沙 S6MF01002 201 48 2 长沙 S6MF01002 201 50 2 长沙 S6MF01002 201 52 1 Select City,Style,Color,[46] From Test Union all Select City,Style,Color,[48] From Test Union all Select City,Style,Color,[50] From Test Union all Select City,Style,Color,[52] From Test 就可以了

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论