帮忙解释一条sql语句
--創建測試環境
Create Table 表
(部门编号 Int,
费用类型 Nvarchar(20),
费用金额 Int)
Insert 表 Select 2, N '差旅费 ', 11
Union All Select 2, N '邮电费 ', 22
Union All Select 2, N '业务费 ', 33
GO
--測試
Declare @S Nvarchar(4000)
Select @S = N 'Select 部门编号 '
Select @S = @S + N ', SUM(Case 费用类型 When N ' ' ' + 费用类型 + N ' ' ' Then 费用金额 Else 0 End) As [ ' + 费用类型 + '] '
From 表 Group By 费用类型
Select @S = @S + N ' From 表 Group By 部门编号 '
EXEC(@S)
GO
--刪除測試環境
Drop Table 表
--結果
/*
部门编号差旅费业务费邮电费
2113322
*/
请高手解释以下@s这个变量的值,特别是Select @S = @S + N ', SUM(Case 费用类型 When N ' ' ' + 费用类型 + N ' ' ' Then 费用金额 Else 0 End) As [ ' + 费用类型 + '] '
From 表 Group By 费用类型
这句
------解决方案--------------------最終@S中執行的語句為
Select
部门编号,
SUM(Case 费用类型 When N '差旅费 ' Then 费用金额 Else 0 End) As [差旅费],
SUM(Case 费用类型 When N '邮电费 ' Then 费用金额 Else 0 End) As [邮电费],
SUM(Case 费用类型 When N '业务费 ' Then 费用金额 Else 0 End) As [业务费]
From
表
Group By
部门编号
對比這兩段代碼,可以容易理解點。
------解决方案--------------------Select @S = @S + N ', SUM(Case 费用类型 When N ' ' ' + 费用类型 + N ' ' ' Then 费用金额 Else 0 End) As [ ' + 费用类型 + '] '
From 表 Group By 费用类型
這段代碼就是為了循環拼結出這段代碼
,SUM(Case 费用类型 When N '差旅费 ' Then 费用金额 Else 0 End) As [差旅费]
,SUM(Case 费用类型 When N '邮电费 ' Then 费用金额 Else 0 End) As [邮电费]
SUM(Case 费用类型 When N '业务费 ' Then 费用金额 Else 0 End) As [业务费]
------解决方案--------------------Select @S = @S + 费用类型+ ',这里是字符串!!, ' From 表 Group By 费用类型
再print @S 看看,你就会明白的了
------解决方案--------------------print(@S)
EXEC(@S)
相当于把多行的数据,连接成横向的串了。
------解决方案--------------------横列转换,print @s 后,你就看的很清楚啦!