两行并一行的问题?

byj2001329 2003-11-01 11:00:32
说明:当顺序号的首字母是Q 意思是出发到目的地,H是自目的地回来。
表1:
顺序号 日期 工号
Q0001 20030915 001
H0002 20030918 001
Q0003 20030920 001 -查询时忽略有去无回的纪录
Q0004 20030920 002
H0005 20030921 002
Q0006 20030922 002
H0007 20030925 002
.......
想要的查询结果:
顺序号 日期 顺序号 日期 间隔 工号
Q0001 20030915 H0002 20030918 3 001
Q0004 20030920 H0005 20030921 1 002
Q0006 20030922 H0007 20030925 3 002
..........

请多指教

...全文
47 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
---涛声依旧--- 2003-11-01
  • 打赏
  • 举报
回复
表設計得不合理
zjcxc 元老 2003-11-01
  • 打赏
  • 举报
回复
用大力的方法吧

不过你的表设计不合理,按理说应该是这样做才对:

表1:
顺序号 日期 工号
Q0001 20030915 001
H0001 20030918 001
Q0003 20030920 001 -查询时忽略有去无回的纪录
Q0004 20030920 002
H0004 20030921 002
Q0006 20030922 002
H0006 20030925 002


即去和回的顺序号应该是一致的,这样才好判断,不然只能根据顺序判断.不准确.

当然,最好是,将回和去的标志也独立一个字段设计,这样更合理
txlicenhe 2003-11-01
  • 打赏
  • 举报
回复
设计确实不太好
比如:
Q0001 20030915 001
H0002 20030918 001
Q0003 20030920 001
H0004 20030921 001

这样的话写起来就麻烦了。


而且不好检测输入值是否合理。 比如回来的时间比去的时间早。

大文 2003-11-01
  • 打赏
  • 举报
回复
这个表设计不合理,应加两字段,一个来去标识,另一个编号字段让来、去一一对应。
pengdali 2003-11-01
  • 打赏
  • 举报
回复
顺序号 日期 顺序号 日期 间隔 工号
---------- -------- ---------- -------- ----------- ----
Q0001 20030915 H0002 20030918 3 001
Q0004 20030920 H0005 20030921 1 002
Q0006 20030922 H0007 20030925 3 002

(所影响的行数为 3 行)
pengdali 2003-11-01
  • 打赏
  • 举报
回复
举例:


create table #a(顺序号 varchar(10),日期 datetime,工号 char(3))
insert #a values ('Q0001','20030915','001')
insert #a values ('H0002','20030918','001')
insert #a values ('Q0003','20030920','001') --查询时忽略有去无回的纪录
insert #a values ('Q0004','20030920','002')
insert #a values ('H0005','20030921','002')
insert #a values ('Q0006','20030922','002')
insert #a values ('H0007','20030925','002')




select a.顺序号,convert(char(8),a.日期,112) 日期,b.顺序号,convert(char(8),b.日期,112) 日期,datediff(day,a.日期,b.日期) 间隔,a.工号 from (
select * from #a where 顺序号 like 'Q%') a,(select * from #a where 顺序号 like 'H%') b
where a.工号=b.工号 and right(a.顺序号,4)=right(b.顺序号,4)-1




go
drop table #a
pengdali 2003-11-01
  • 打赏
  • 举报
回复
select a.顺序号,convert(char(8),a.日期,112) 日期,b.顺序号,convert(char(8),b.日期,112) 日期,datediff(day,a.日期,b.日期) 间隔,a.工号 from (
select * from 你的表 where 顺序号 like 'Q%') a,(select * from 你的表 where 顺序号 like 'H%') b
where a.工号=b.工号 and right(a.顺序号,4)=right(b.顺序号,4)-1

34,495

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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