我想从表中计算数据,其中包含日期,小时和数据..表中有很多数据..小时是数据库中的int数据类型,其他(DATE.etc)是数据类型varchar ..示例如下:
DATE hour data1 data2
-------------------------------
01/01/2010 1 10860 1234
01/01/2010 2 10861 1234
01/01/2010 3 10862 1234
01/01/2010 4 10863 567
01/01/2010 5 10864 458
02/01/2010 1 10865 3467
02/01/2010 2 10866 7890
02/01/2010 3 10867 863
02/01/2010 4 10868 0
02/01/2010 5 10868 698
03/01/2010 1 10868 4693
03/01/2010 2 10868 7853
03/01/2010 3 10868 5987
....................etc
并从上面的数据。我想总结数据从日期:01/01/2010,小时:2到第二天日期:02/01/2010,小时:1当然日期:02/01/2010,小时:2到目前为止:03/01/2010,小时:1和其余数据..意味着数据结果的输出如下:
DATE sdata1 sdata2
-------------------------------
01/01/2010 54315 6960
02/01/2010 54337 14144
03/01/2010 21736 13840
...................etc
date,data1和data2的数据类型是varchar,EXCEPT时间是数据类型int ...
sdata1和sdata2是数据的总和,还有其他任何方式可以将这些数据从今天的小时:2到第二天小时:2?非常感谢大家..谢谢你......
这些数据来自PLC数据的批量插入......
这是我自己的解决方案,但它永远不会成功!!
从表中选择SUM(CONVERT(int,data1))AS sdata1,SUM(CONVERT(int,data2))AS sdata2 (CONVERT(datetime,date,105)> = CONVERT(datetime,date,105)和CONVERT(int,hour)> = 2)和 (CONVERT(datetime,date,105)< = DATEADD(day,1,CONVERT(datetime,date,105))和CONVERT(int,hour)< 2) 和 月(CONVERT(日期时间,日期,103))='01'和年份(CONVERT(日期时间,日期,103))='2010'
有人帮我解决这个问题......我的大脑爆裂...... @@答案 0 :(得分:1)
你去吧
set dateformat dmy
declare @t table(DATE date, hour int, data1 int, data2 int)
insert into @t
select '01/01/2010', 1, 10860, 1234 union all
select '01/01/2010', 2, 10861, 1234 union all
select '01/01/2010', 3, 10862, 1234 union all
select '01/01/2010', 4, 10863, 567 union all
select '01/01/2010', 5, 10864, 458 union all
select '02/01/2010', 1, 10865, 3467 union all
select '02/01/2010', 2, 10866, 7890 union all
select '02/01/2010', 3, 10867, 863 union all
select '02/01/2010', 4, 10868, 0 union all
select '02/01/2010', 5, 10868, 698 union all
select '03/01/2010', 1, 10868, 4693 union all
select '03/01/2010', 2, 10868, 7853 union all
select '03/01/2010', 3, 10868, 5987
select dateadd(day,case when hour>1 then 1 else 0 end,date),
sum(data1),sum(data2)
from @t
group by dateadd(day,case when hour>1 then 1 else 0 end,date)
答案 1 :(得分:0)
欲望结果应该是这样的
01/01/2010 54315 6960
02/01/2010 54337 14144
03/01/2010 21736 13840
...................等
但是从你的查询。它运作良好...谢谢你,最后的结果如下:
02/01/2010 54315 6960
03/01/2010 54337 14144
04/01/2010 21736 13840
...................等
意味着查询总结了从2010年1月1日到2010年1月2日的数据,并输出了02/01 / 2010..hehe ..