这句Sql语句我想生成日期段内每日汇总列表,请问如何改.

qufusongyu 2010-03-30 09:17:36
这句Sql语句我想生成日期段内每日汇总列表,请问如何改.
SELECT DWDM,SUM(Je) Je,CONVERT(CHAR(10),SFRQ,121) AS RQ
FROM dbo.YPMX
WHERE (SFRQ Between '2010-1-30 8:27:37' And '2010-3-30 8:27:37')
AND (DWDM='W002')
GROUP BY DWDM,CONVERT(CHAR(10),SFRQ,121)
...全文
114 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
老黎 2010-03-30
  • 打赏
  • 举报
回复

--未上机测试,可能会有语法错误
declare @StartTime datetime, @EndTime datetime
set @StartTime = '2010-01-30 08:27:37'
set @EndTime = '2010-03-30 08:27:37'

select *
from (
select allday = convert(char(10),dateadd(day, number, @StartTime),121)
from master..spt_values
where type = 'P'
and number between 0 and datediff(day, @StartTime, @EndTime)
) a
left join (SELECT DWDM,SUM(Je) Je,CONVERT(CHAR(10),SFRQ,121) AS RQ
FROM dbo.YPMX
WHERE SFRQ Between @StartTime And @EndTime)
AND (DWDM='W002')
GROUP BY DWDM,CONVERT(CHAR(10),SFRQ,121))b
) b
on a.allday = b.RQ
ws_hgo 2010-03-30
  • 打赏
  • 举报
回复
declare @StartTime Datetime   
set @StartTime='2009-3-21'
select convert(varchar(10),dateadd(month,datediff(month,0,@StartTime),0+number),120) '日期' from master..spt_values where type='P' and dateadd(day,number,dateadd(month,datediff(month,0,@StartTime),0))<dateadd(day,-day(@StartTime)+1,dateadd(mm,1,@StartTime))

--每一小时来划分一天
select right(100+number,2)+':00'+'-'+right(101+number,2)+':00' as '时间段' from master..spt_values where type='p' and number between 0 and 23


实例
declare @TT table
(
ID char(10),
DATE varchar(10),
NUM int
)
insert into @TT select '01','2009-01',10
union all select '01','2009-02',11
union all select '01','2009-03',12
union all select '02','2009-02',32
union all select '02','2009-04',33

select distinct T1.ID,T2.Date into #1 from
(
select Date='2009-01'
union all
select Date='2009-02'
union all
select Date='2009-03'
union all
select Date='2009-04'
union all
select Date='2009-05'
union all
select Date='2009-06'
) T2,@TT T1

select T2.ID,T2.Date,isnull(T1.Num,0) '数量' from @TT T1 right join #1 T2 on T1.ID=T2.ID and T1.Date=T2.Date
ID Date 数量
---------- ------- -----------
01 2009-01 10
01 2009-02 11
01 2009-03 12
01 2009-04 0
01 2009-05 0
01 2009-06 0
02 2009-01 0
02 2009-02 32
02 2009-03 0
02 2009-04 33
02 2009-05 0
02 2009-06 0


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2009/09/22/4581876.aspx
bancxc 2010-03-30
  • 打赏
  • 举报
回复
这个就可以啊
SQL77 2010-03-30
  • 打赏
  • 举报
回复
是有可能没有时间?

那可以利用MASTER..SPT_VALUES 来生成表,再LEFT JOIN
SQL77 2010-03-30
  • 打赏
  • 举报
回复
SELECT DWDM,SUM(Je) Je,CONVERT(CHAR(10),SFRQ,120) AS RQ 
FROM dbo.YPMX
WHERE (SFRQ Between '2010-1-30 8:27:37' And '2010-3-30 8:27:37')
AND (DWDM='W002')
GROUP BY DWDM,CONVERT(CHAR(10),SFRQ,120)
?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧