查询所有的 完整过程

振乾 2010-10-13 10:16:03

IF(OBJECT_ID('cha') IS NOT NULL) DROP TABLE cha
CREATE TABLE cha
(
id INT,
VALUE INT,
msgtitle VARCHAR(50)
)
INSERT cha
SELECT 1,1,'开始' union all
SELECT 3,4,'结束' union all
SELECT 5,6,'开始' union all
SELECT 8,10,'结束' union all
SELECT 11,20,'开始' union all
SELECT 16,25,'结束' union all
SELECT 20,1,'开始' union all--此行相邻的没有 结束,所以 无效,舍弃掉
SELECT 25,30,'开始' union all
SELECT 36,34,'结束'

--查询出完整过程的详情(按照id排序,所有相邻的'开始'到'结束'为一个完整过程,不连续的舍弃)
SELECT * FROM cha



最终效果
msgtitle value msgtitle value
开始 1 结束 4
开始 6 结束 10
开始 20 结束 25
开始 30 结束 34
...全文
186 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
振乾 2010-10-15
  • 打赏
  • 举报
回复
各位高手还有其他方法吗??

请赐教。
kevn 2010-10-13
  • 打赏
  • 举报
回复
怎么都得有个自增,入楼主,或者row_number
振乾 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 billpu 的回复:]
能解决问题就是好办法 帮顶
[/Quote]

谢谢你朋友,每个人都有自己的解决问题不同的方法,
我 一直在解决 问题的时候,都想了解下大家 的真知灼见。

不同的方法,解决相同的问题,寻求最有效最间接的路径。
billpu 2010-10-13
  • 打赏
  • 举报
回复
能解决问题就是好办法 帮顶
振乾 2010-10-13
  • 打赏
  • 举报
回复

SELECT IDENTITY(INT,1,1) AS id, VALUE,a.msgtitle INTO #temp FROM cha a ORDER BY id

SELECT a.msgtitle,a.value,b.msgtitle,b.value FROM #temp a
LEFT JOIN #temp b ON a.id=b.id-1
WHERE ISNULL(b.id,0)!=0 AND a.msgtitle='开始' AND b.msgtitle='结束'
ORDER BY a.id

这个 是我写的 sql,各位还有其他的方法 请赐教。
闹铃 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gguozhenqian 的回复:]
SQL code

SELECT IDENTITY(INT,1,1) AS id, VALUE,a.msgtitle INTO #temp FROM cha a ORDER BY id

SELECT a.msgtitle,a.value,b.msgtitle,b.value FROM #temp a
LEFT JOIN #temp b ON a.id=b.id-1
WHERE……
[/Quote]
使用了left join 操作把b.id为null的值添加到了中间表中 然后又在where中用ISNULL(b.id,0)!=0去掉了b.id 为null的值 所以说用错了联接 应改为内联接

;with cte as
(
select ROW_NUMBER()over(order by id)as row,*
from cha
)
select *
from cte as t
inner join cte t1
on t.row=t1.row-1
and t.msgtitle<>t1.msgtitle
where t.msgtitle='开始'
SQLCenter 2010-10-13
  • 打赏
  • 举报
回复

想不出更好的方法
振乾 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sqlcenter 的回复:]
如果连续两行/多行结束呢
[/Quote]

也舍弃掉,
只有 按照 id 排序后,
‘开始‘ ’结束‘ 是相邻的,才是一个完整的过程。
SQLCenter 2010-10-13
  • 打赏
  • 举报
回复
如果连续两行/多行结束呢
振乾 2010-10-13
  • 打赏
  • 举报
回复
大家 继续帮忙看看啊。

34,588

社区成员

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

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