读书人

帮忙解释一条sql语句解决办法

发布时间: 2012-01-16 23:36:51 作者: rapoo

帮忙解释一条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 后,你就看的很清楚啦!

读书人网 >SQL Server

热点推荐