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

2022-05-24 0 336

复制代码 代码如下:

–行转列问题

–建立測試環境

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

就可以了

免责声明:
1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

NICE源码网 MsSql mssql 数据库表行转列,列转行终极方案 https://www.niceym.com/60015.html