首先谢谢您的回答。
有一张表 表内字段为
主键,计划序号,计划名称,计划开始时间,计划结束时间,版本号(连接版本表)
当前数据为
1,1,name1,2015/02/03,2015/02/05,200
2,2,name2,2015/02/03,2015/02/05,200
3,3,name3,2015/02/03,2015/02/05,200
4,1,name1,2015/02/03,2015/02/05,201
5,2,name2,2015/02/03,2015/02/05,201
6,4,name4,2015/02/03,2015/02/05,201
现在公司要求。。实现一个对比表单,where条件是2个版本号,比200,201,查询结果应该是
1,name1,2015/02/03,2015/02/05,0
2,name2,2015/02/03,2015/02/05,0
3,name3,2015/02/03,2015/02/05,0
4,name4,2015/02/03,2015/02/05,0 最后字段的0是用201版本的开始时间减200版本的开始时间,DIFF函数的那个意思。
其他我现在可以实现,重点的就是 怎么让它显示出来的条数为1234。。。INNER LEFT RIGHT FULL连接都试过了。。实在晕比~~~求高手
1、order by 计划名称,版本号
2、根据lead和lag函数把下一个版本的字段获取到同一行(怎么实现我的blog中sqlserver,mysql,oracle都已经介绍实现方法了)
3、剩下的就是你想怎么减就怎么减了。
1234不就是计划序号么?
额 都显示 - - 显示200版本的时间 201版本的时间 201-200版本的差距时间。
如果某一个计划 200有 201没有 要求显示出来 出来的格式相当于只有200的这部分 201那部分和差距时间就是NULL
一个最笨的方法就是在统计列直接搜索出条数
不过这样做效率比较低
SQL Server
SELECT ISNULL(t1.计划序号,t2.计划序号) 计划序号,
ISNULL(t1.计划名称,t2.计划名称) 计划名称,
t1.计划开始时间, t1.计划结束时间,
t2.计划开始时间, t2.计划结束时间,
DATEDIFF(day,t2.计划开始时间,t1.计划开始时间) 差距时间
FROM (SELECT * FROM table1 WHERE 版本号=200) t1
FULL JOIN (SELECT * FROM table1 WHERE 版本号=201) t2
ON t1.计划序号=t2.计划序号
ORDER BY 计划序号
结果
计划序号 计划名称 计划开始时间 计划结束时间 计划开始时间 计划结束时间 差距时间
----------- -------- ------------ ------------ ------------ ------------ -----------
1 name1 2015/02/03 2015/02/05 2015/02/03 2015/02/05 0
2 name2 2015/02/03 2015/02/05 2015/02/03 2015/02/05 0
3 name3 2015/02/03 2015/02/05 NULL NULL NULL
4 name4 NULL NULL 2015/02/03 2015/02/05 NULL