首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-01-16 
帮忙解释一条sql语句--創建測試環境CreateTable表(部门编号Int,费用类型Nvarchar(20),费用金额Int)Insert

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

热点排行