有如下需求,数据表TarOutput结结构为:
开始日期 结束日期 各阶段每天目标值
ID StartDate EndDate A B C D E F
1 2010/5/17 2010/5/22 9000 8000 8000 8000 8500 9000
2 2010/5/24 2010/5/29 8500 7500 8000 8000 8500 9000
3 2010/5/31 2010/6/5 8000 8000 8000 8000 8500 8000
4 2010/6/7 2010/6/19 9000 8000 8000 8000 8500 9000
......开始日期 和 结束日期不会交叉,表TarOutput为预先设置,请问
如果我要查询任一时间段 比如 d1 = 2010/5/18 和 d2=2010/5/28 日期范围内各阶段总目标值(未设置日期,
其各阶段值默认为0 如2010/5/23日。
要统计出2010/5/18至2010/5/28各阶段每天目标值总和,这个SQL该如何实现?统计出2010/5/18至2010/5/28各阶段每天目标值(随意设定的)总和:即 5/18 5/19 5/20 5/21 5/22 5/23 5/24 5/25 5/26 5/27 5/28
SUM(A)= 9000 +9000 +9000 +9000 +9000 + 0 + 8500 + 8500 + 8500 +8500+ 8500 = 87500
SUM(B)= 8000 +8000+8000 +8000 +8000 + 0 + 7500 + 7500 + 7500 +7500+ 7500 = 77500
SUM(C)= 8000 +8000+8000 +8000 +8000 + 0 + 8000 + 8000 + 8000 +8000+ 8000 = 80000
SUM(D)= 8000 +8000+8000 +8000 +8000 + 0 + 8000 + 8000 + 8000 +8000+ 8000 = 80000
SUM(E)= 8500 +8500+8500 +8500 +8500 + 0 + 8500 + 8500 + 8500 +8500+ 8500 = 85000
SUM(F)= 9000 +9000 +9000 +9000 +9000 + 0 + 9000 + 9000 + 9000 +9000+ 9000 = 90000
开始日期 结束日期 各阶段每天目标值
ID StartDate EndDate A B C D E F
1 2010/5/17 2010/5/22 9000 8000 8000 8000 8500 9000
2 2010/5/24 2010/5/29 8500 7500 8000 8000 8500 9000
3 2010/5/31 2010/6/5 8000 8000 8000 8000 8500 8000
4 2010/6/7 2010/6/19 9000 8000 8000 8000 8500 9000
......开始日期 和 结束日期不会交叉,表TarOutput为预先设置,请问
如果我要查询任一时间段 比如 d1 = 2010/5/18 和 d2=2010/5/28 日期范围内各阶段总目标值(未设置日期,
其各阶段值默认为0 如2010/5/23日。
要统计出2010/5/18至2010/5/28各阶段每天目标值总和,这个SQL该如何实现?统计出2010/5/18至2010/5/28各阶段每天目标值(随意设定的)总和:即 5/18 5/19 5/20 5/21 5/22 5/23 5/24 5/25 5/26 5/27 5/28
SUM(A)= 9000 +9000 +9000 +9000 +9000 + 0 + 8500 + 8500 + 8500 +8500+ 8500 = 87500
SUM(B)= 8000 +8000+8000 +8000 +8000 + 0 + 7500 + 7500 + 7500 +7500+ 7500 = 77500
SUM(C)= 8000 +8000+8000 +8000 +8000 + 0 + 8000 + 8000 + 8000 +8000+ 8000 = 80000
SUM(D)= 8000 +8000+8000 +8000 +8000 + 0 + 8000 + 8000 + 8000 +8000+ 8000 = 80000
SUM(E)= 8500 +8500+8500 +8500 +8500 + 0 + 8500 + 8500 + 8500 +8500+ 8500 = 85000
SUM(F)= 9000 +9000 +9000 +9000 +9000 + 0 + 9000 + 9000 + 9000 +9000+ 9000 = 90000
解决方案 »
- 高分求,高难度sql语句!!!
- SQL Sever新手求助~~~这句表格该怎么写?
- 这样的SQL怎么写?
- oracle中的DUAL表在sqlserver中用什么代替?
- 驱动程序的 SQLAllocHandle on SQL_HANDLE_ENV 失败
- 如何通过RDS访问远程服务器上的SQL数据库
- 求一句SQL查询
- 求教一个类别表,一个细表的行列转换
- 请教datetime的数据类型只需其中之一的修改
- 一个简单的触发器?
- 关于数据库An internal error occurred during:" Generating Artifacts"的问题?
- 请教如何将CSV数据文件导入数据库表中
数据唯一
CREATE TABLE a_(ID INT, StartDate SMALLDATETIME, EndDate SMALLDATETIME, A INT, B INT, C INT, D INT, E INT, F INT)
insert a_ select 1,'2010/5/17','2010/5/22',9000,8000,8000,8000,8500,9000
union all select 2,'2010/5/24','2010/5/29',8500,7500,8000,8000,8500,9000
union all select 3,'2010/5/31','2010/6/5',8000,8000,8000,8000,8500,8000
union all select 4,'2010/6/7','2010/6/19',9000,8000,8000,8000,8500,9000DECLARE @a SMALLDATETIME,@b SMALLDATETIME,@C INT
SELECT @a='2010/5/18',@b='2010/5/28',@C=DATEDIFF(DAY,@A,@B)+1SELECT SUM(A) A,SUM(B) B,SUM(C) C,SUM(D) D,SUM(E) E,SUM(F) F FROM
A_ AA
,(SELECT DATEADD(DAY,NUMBER,@A) X FROM MASTER.DBO.spt_values sv WHERE TYPE='P' AND DATEADD(DAY,NUMBER,@A)<=@B)BB
WHERE X BETWEEN STARTDATE AND ENDDATE--RESULT
/*A B C D E F
----------- ----------- ----------- ----------- ----------- -----------
87500 77500 80000 80000 85000 90000(所影响的行数为 1 行)*/