一个关于SQL行列转换的问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:55:33
我的一个库中由系统每天生成一个表,表名为(表_"一年中的第几天")表结构如下:
ID 姓名 记录 日期

现在举例:
table_1
ID 姓名 记录 日期
1 张 80 2008-1-1
1 李 82 2008-1-1
1 王 88 2008-1-1

table_2
ID 姓名 记录 日期
1 张 82 2008-1-2
1 李 82 2008-1-2
1 王 84 2008-1-2

table_3
ID 姓名 记录 日期
1 张 81 2008-1-3
1 李 83 2008-1-3
1 王 86 2008-1-3

现在我想实现的效果是:

ID 姓名 2008-1-1 2008-1-2 2008-1-3 平均值 最大值 最小值
1 张 80 82 81 81 82 80
2 李 82 82 83 82.7 83 82
3 王 88 84 86 85 88 84

怎么实现啊?
给出T_SQL代码

上面给出的是个例子,我遇到的问题复杂些,不知道有几个表,如何做!
请别用游标!游标我可以搞定,太麻烦而且不太好用(我做的不好用)

上面三张表的ID给错了 分别是1,2,3

3楼的答案不行哦,方法太死了哈,如果有10000张表那我不疯了
我就是想知道怎么动态生成,麻烦给个答案!~~

我最喜欢回答行列置换的问题
一下的希望能有帮组
随便问一下,你的 table_1.。。。的ID是不是给错啦

select * from table_1
union all
select * from table_2
union all
select * from table_3
..............
union all
select * from table_n

这样的检索一下叫做 X 表

1、
select a.*, case when a.日期 = '2008-1-1' then 记录 end as a
, case when a.日期 = '2008-1-2' then 记录 end as b
, case when a.日期 = '2008-1-3' then 记录 end as c
, avg(记录) over(partition by a.id) 平均值
, max(记录) over(partition by a.id) 最大值
, min(记录) over(partition by a.id) 最小值
from (X) a

2、
select aa.id,aa.姓名, max(a) a, max(b) b, max(c) c, max(平均值) 平均值,max(最大值) 最大值,max(最小值) 最小值 from
(
select a.*, case when a.日期 = '2008-1-1' then 记录 end as a
, case when a.日期 = '2008-1-2' then 记录 end as b
, case when a.日期 = '2008-1-3' then 记录