首页 新闻 会员 周边 捐助

!!【给出所有专家分!!】---数据库查询汇总的问题

0
悬赏园豆:50 [已解决问题] 解决于 2010-12-21 14:52

由于原来表结构过于复杂。所以模拟一个简单的。。

person       date                   sum             t1         t2       t3       t4     t5 

jack          2010-1-1                5                0          0        5        0       0

jack          2010-1-10              0                0          0        0        0       0

jack          2010-1-20              9                0          0        0        0       9

tom          2010-1-               4                0          4        0        0       0

tom          2010-1-9                6                0          0        0        6       0

tom          2010-1-18              8                0          0        8        0       0

.................................................

t1.  .  .t5  最多只会有一个不为0,其余都为0、日期可以看做每天都有。

要得到

person    month      1   2    3   4  ....8  9  10 .....18   19     20 .......  31    (1.。31为日期。天、。表头应该是固定的,,不管有没有这天的数据。。)

jack        2010-1     t3                                                     t5          

tom        2010-1                 t2            t4            t3

理论上应该遍历。T1..T2..T3...../..看哪个不为0.。然后取出表头。。。放新表里面。。。难点。。不会、、

leoD的主页 leoD | 初学一级 | 园豆:0
提问于:2010-12-21 12:55
< >
分享
最佳答案
0

leoD你好 由于你提的该问题个人觉得还算比较经典 所以以随笔形式回答您的问题

点击链接地址

收获园豆:50
追索 | 小虾三级 |园豆:625 | 2010-12-21 14:42
非常感谢。。!!
leoD | 园豆:0 (初学一级) | 2010-12-21 14:43
其他回答(1)
0

1.这是标准的交叉查询问题

2.根据你的描述(t1.  .  .t5  最多只会有一个不为0,其余都为0、日期可以看做每天都有),sum = t1 + t2 + t3 + t4 + t5

下面给出1-5号的SQL语句,其它你复制补上就可以

select
[person],
[date] = convert(varchar(4),datepart(year,[date])) + '-' + convert(varchar(2),datepart(month,[date])),
1 = case when datepart(day,[date])=1 then [sum] else NULL end,
2 = case when datepart(day,[date])=2 then [sum] else NULL end,
3 = case when datepart(day,[date])=3 then [sum] else NULL end,
4 = case when datepart(day,[date])=4 then [sum] else NULL end,
5 = case when datepart(day,[date])=5 then [sum] else NULL end
from t
group by [person],
[date] = convert(varchar(4),datepart(year,[date])) + '-' + convert(varchar(2),datepart(month,[date]))
彭汉生 | 园豆:1233 (小虾三级) | 2010-12-21 14:10
我知道这个意思。。但sum列其实是没多大用的。。 日期 12345。。。。31下面的数据不是sum 。而是t1,t2,t3.。。。。哪个不为0.日期下面就显示哪个。。所有jack的1号下面显示的是t3.20号下面显示的是t5.
支持(0) 反对(0) leoD | 园豆:0 (初学一级) | 2010-12-21 14:15
如果sum没意义,你将语句里的sum换成 t1 + t2 + t3 + t4 + t5就可以了
支持(0) 反对(0) 彭汉生 | 园豆:1233 (小虾三级) | 2010-12-21 14:17
哎。。谢谢你了。。但真的不是这个意思。。。
支持(0) 反对(0) leoD | 园豆:0 (初学一级) | 2010-12-21 14:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册