日期:2014-05-17  浏览次数:20630 次

sql 如何实现分日期段合计?
有如下表:
Day        Qty
2012-2-1 11
2012-2-2 10
2012-2-3 2
2012-2-4 5
2012-2-14 6
2012-2-15 4
2012-2-16 8
2012-2-26 8
2012-3-16 1
2012-3-17 1
2012-3-18 5
2012-3-19 6
......
请问在SQL2000里面,将上面表的数据,按照半个月来做一个统计,就比如需要出现如下效果:
Qty
38 --2月份前15天之内的加总
16 -- 2月15日之后的加总
13 --3月前15天的加总
......
请教代码,谢谢了!


------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (Day datetime,Qty int)
insert into [TB]
select '2012-2-1',11 union all
select '2012-2-2',10 union all
select '2012-2-3',2 union all
select '2012-2-4',5 union all
select '2012-2-14',6 union all
select '2012-2-15',4 union all
select '2012-2-16',8 union all
select '2012-2-26',8 union all
select '2012-3-16',1 union all
select '2012-3-17',1 union all
select '2012-3-18',5 union all
select '2012-3-19',6

select * from [TB]


SELECT  SUBSTRING(CONVERT(VARCHAR(10), DAY, 120), 6, 2) + '月'
        + CASE WHEN SUBSTRING(CONVERT(VARCHAR(10), DAY, 120), 9, 2) > '15'
               THEN '15日后'
               ELSE '15日前'
          END AS '日期' ,
        SUM(qty) AS qty
FROM    dbo.TB
GROUP BY SUBSTRING(CONVERT(VARCHAR(10), DAY, 120), 6, 2) + '月'
        + CASE WHEN SUBSTRING(CONVERT(VARCHAR(10), DAY, 120), 9, 2) > '15'
               THEN '15日后'
               ELSE '15日前'
          END 


/*
日期 qty
02月15日后 16
02月15日前 38
03月15日后 13*/

------解决方案--------------------

select Day,sum(Qty) from (
  select Day=(case when 这里先转换一下格式为时间,在截取“日”<15 then),Qty from 表
)a

------解决方案--------------------
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (Day datetime,Qty int)
insert into [TB]
select '2012-2-1',11 union all
select '2012-2-2',10 union all
select '2012-2-3',2 union all
select '2012-2-4',5 union all
select '2012-2-14',6 union all
select '2012-2-15',4 union all
select '2012-2-16',8 union all
select '2012-2-26',8 union all
select '2012-3-16',1 union all
select '2012-3-17',1 union all
select '2012-3-18',5&