sqlserver问题,求思路
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver问题,求思路相关的知识,希望对你有一定的参考价值。
如以下结果集:
月份 日最高访问量 月访问量
1 20 30
3 10 20
4 100 200
二月份由于没有访问量所以根据月份分组没有二月份数据。如何在这个数据集里插入"2 0 0"。让1到4月份连续起来
也就是创建时间维度表。vs来做就可以。
可以用代码模拟一下:
--模拟既有表
declare @tbA table
(
CMonth char(7),
DMaxView int,
MMaxView int
)
insert into @tbA(CMonth,DMaxView,MMaxView)
select '2012-01','20','30' union all
select '2012-03','10','20' union all
select '2012-04','100','200'
--维度时间表
declare @tb table
(
id int identity(1,1),
RQ char(7)
)
declare @SRQ DateTime set @SRQ='2012-01-01 00:00:00.000'
declare @ERQ DateTime set @ERQ='2012-05-01 00:00:00.000'
declare @temp int set @temp=0
declare @end int set @end=datediff(m,@SRQ,@ERQ)
while @temp<@end
begin
insert into @tb(RQ) values (convert(char(7),DATEADD(m,@temp,@SRQ),120));
set @temp=@temp+1;
end
select A.RQ,isnull(B.DMaxView,0),isnull(B.MMaxView,0)
from @tb A
left join @tbA B on (A.RQ=B.CMonth)
-------
结果是:
-------------------------
2012-01 20 30
2012-02 0 0
2012-03 10 20
2012-04 100 200
---
维度表就是一个连续的时间表。时间维度。 参考技术A 先用select 1 as M union all select 2 union all select 3 union all select 4..... 创建建一个1到12的子表,再以这个子表去左关联按月汇总的信息。 参考技术B 不太明白你的意思,如果仅仅是补上一条数据,用 insert语句插入一条数据就可以了吧。 参考技术C insert into tablename (月份,日最高访问量,月访问量) values ('2','0','0')
以上是关于sqlserver问题,求思路的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver2000,为啥执行时很慢?仅仅是300条数据。求大神帮助