首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql 怎么实现分日期段合计

2013-06-26 
sql 如何实现分日期段合计?有如下表:DayQty2012-2-1112012-2-2102012-2-322012-2-452012-2-1462012-2-1542

sql 如何实现分日期段合计?
有如下表:
Day       Qty
2012-2-111
2012-2-210
2012-2-32
2012-2-45
2012-2-146
2012-2-154
2012-2-168
2012-2-268
2012-3-161
2012-3-171
2012-3-185
2012-3-196
......
请问在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 union all


select '2012-3-19',6


with cte
as
(
select Day=case when datename(DAY,TB.Day)>15 then str(DATENAME(MONTH,TB.Day),2)+'月15日前' 
else str(DATENAME(MONTH,TB.Day),2)+'月15日后' end
   ,tb.Qty
from [TB]
)
select cte.Day,SUM(cte.Qty)Qty
from
cte


此SQL的约束:str(DATENAME(MONTH,TB.Day),2)+'月15日前',这个不能进行跨年度查询。
如果跨年度查询,需要加上年。

热点排行