27,579
社区成员
发帖
与我相关
我的任务
分享
--1、行互列
--> --> (Roy)生成測試數據
if not object_id('Class') is null
drop table Class
Go
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
Go
--2005方法:
动态:
declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course] --isnull(@s+',','') 去掉字符串@s中第一个逗号
exec('select [Student],'+@s+',[总成绩] from (select *,[总成绩]=sum([Score])over(partition by [Student]) from Class) a
pivot (max([Score]) for [Course] in('+@s+'))b ')
生成静态:
select
[Student],[数学],[物理],[英语],[语文],[总成绩]
from
(select *,[总成绩]=sum([Score])over(partition by [Student]) from Class) a --平均分时用avg([Score])
pivot
(max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b
生成格式:
/*
Student 数学 物理 英语 语文 总成绩
------- ----------- ----------- ----------- ----------- -----------
李四 77 85 65 65 292
张三 87 90 82 78 337
(2 行受影响)
*/
go
SELECT b.Class.CYear, a.FeePaid.CID, a.FeePaid.PID, d.PName, c.YID
FROM FeePaid a INNER JOIN Class b ON a.CID = b.CID
INNER JOIN Fee c ON a.PFeeID = c.FeeID
INNER JOIN Payer d ON a.PID = d.PID AND a.CID = d.CID
GROUP BY a.CYear, b.CID, b.PID, d.PName, c.YID
SELECT Class.CYear, FeePaid.CID, FeePaid.PID, Payer.PName, Fee.YID
FROM FeePaid
INNER JOIN Class ON FeePaid.CID = Class.CID
INNER JOIN Fee ON FeePaid.PFeeID = Fee.FeeID
INNER JOIN Payer ON (FeePaid.PID = Payer.PID) AND (FeePaid.CID = Payer.CID)
GROUP BY Class.CYear, FeePaid.CID, FeePaid.PID, Payer.PName, Fee.YID