SQL数据库表里的数据合并

yingxiongmingduan 2010-04-19 10:37:10
一个表中:
userid dbenginddatetime denddatetime nLeaveHours
aa 2010-04-01 08:00:00 2010-04-01 17:30:00 8
aa 2010-04-01 19:00:00 2010-04-01 22:00:00 3
我想得到:
aa 2010-04-01 08:00:00 22:00:00 11
也就是说:
一天的数据都数据加起来。我查了资料都没有得到想要的结果。
麻烦各位朋友看看。
...全文
85 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
心中的彩虹 2010-04-19
  • 打赏
  • 举报
回复



select userid,min(dbenginddatetime) dbenginddatetime ,max(denddatetime) denddatetime,sum(nLeaveHours) nLeaveHours
from table
where datediff(d,dbenginddatetime,denddatetime)=0
group by userid




zw87804600 2010-04-19
  • 打赏
  • 举报
回复
路过学习
yingxiongmingduan 2010-04-19
  • 打赏
  • 举报
回复
谢谢各位
永生天地 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xys_777 的回复:]
select userid, min(dbenginddatetime) ,max(denddatetime ),sum(nLeaveHour)
from tb group by userid
where dbenginddatetime>convert(varchar(10),getdate(),121) and denddatetime <convert(varchar(10),getda……
[/Quote]


select userid, min(dbenginddatetime) ,max(denddatetime ),sum(nLeaveHours)
from tb
where dbenginddatetime>convert(varchar(10),getdate(),121) and denddatetime <convert(varchar(10),getdate()+1,121)

group by userid


group by 位置错了
永生天地 2010-04-19
  • 打赏
  • 举报
回复
select userid, min(dbenginddatetime) ,max(denddatetime ),sum(nLeaveHour)
from tb group by userid
where dbenginddatetime>convert(varchar(10),getdate(),121) and denddatetime <convert(varchar(10),getdate()+1,121)
dawugui 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yingxiongmingduan 的回复:]
汗,就是跨天的情况还没有考虑
[/Quote]
跨天的话,则各算各的.
例如
22:00 -- 03:00

则第一天算两个小时,第二天算3个小时.
dawugui 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 yingxiongmingduan 的回复:]
一个表中:
userid dbenginddatetime denddatetime nLeaveHours
aa 2010-04-01 08:00:00 2010-04-01 17:30:00 8
aa 2010-04-01 19:00:00 2010-04-01 22:00:00 3
我想得到:
aa 2010-04-01 08:00:00 22:00:00 11
也就是说:
一……
[/Quote]
create table tb(userid varchar(10) , dbenginddatetime datetime,denddatetime datetime,nLeaveHours int)
insert into tb values('aa' ,'2010-04-01 08:00:00', '2010-04-01 17:30:00', 8)
insert into tb values('aa' ,'2010-04-01 19:00:00', '2010-04-01 22:00:00', 3)
go

--简单的算法
select userid , min(dbenginddatetime) , max(denddatetime) , sum(nLeaveHours)
from tb
group by userid
/*
userid
---------- ------------------------------------------------------ ------------------------------------------------------ -----------
aa 2010-04-01 08:00:00.000 2010-04-01 22:00:00.000 11

(所影响的行数为 1 行)
*/

--严谨的算法
select userid , min(dbenginddatetime) , max(denddatetime) , sum(nLeaveHours)
from tb
group by userid , convert(varchar(10),dbenginddatetime,120),convert(varchar(10),denddatetime,120)
/*
userid
---------- ------------------------------------------------------ ------------------------------------------------------ -----------
aa 2010-04-01 08:00:00.000 2010-04-01 22:00:00.000 11

(所影响的行数为 1 行)
*/

drop table tb
yingxiongmingduan 2010-04-19
  • 打赏
  • 举报
回复
汗,就是跨天的情况还没有考虑
budong0000 2010-04-19
  • 打赏
  • 举报
回复
group by

select userid,min(dbenginddatetime),max(denddatetime),sum(nLeaveHours) from tbl
group by userid
东那个升 2010-04-19
  • 打赏
  • 举报
回复
dbenginddatetime denddatetime

跨天怎么办
悔说话的哑巴 2010-04-19
  • 打赏
  • 举报
回复
先把数据合在一起,在求和。
永生天地 2010-04-19
  • 打赏
  • 举报
回复
sum(nLeaveHour)
悔说话的哑巴 2010-04-19
  • 打赏
  • 举报
回复
http://www.cnblogs.com/CrazyWill/archive/2006/02/20/334247.html
hbjlwhl 2010-04-19
  • 打赏
  • 举报
回复
万一是第二天下班怎么办呢?
IVO_O 2010-04-19
  • 打赏
  • 举报
回复
学习。。。。
yingxiongmingduan 2010-04-19
  • 打赏
  • 举报
回复
其实还是比较复杂的

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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