sql - 需要在 sql server 中返回一个有 start 和 END 的 ID
问题描述
我有一个场景,我需要找到其中只有 start 和 END 的 ID。以下是供参考的表格。
Declare @T Table ( ID int, Name varchar(100))
Insert into @T values (1,'Start')
Insert into @T values (1,'END')
Insert into @T values (1,'Stuart')
Insert into @T values (1,'robin')
Insert into @T values (2,'Start')
Insert into @T values (2,'END')
Insert into @T values (3,'Start')
Insert into @T values (4,'END')
我希望输出为:
ID 名称
2 开始
2 结束
我想要那些只有开始和结束的ID。
到目前为止我尝试了什么:
SELECT * FROM @T t
WHERE EXISTS (SELECT * FROM @T WHERE id = t.id AND name = 'start')
AND EXISTS (SELECT * FROM @T WHERE id = t.id AND name = 'END')
但我的查询也给出了 ID 1。
有人可以帮我解决这个问题。
解决方案
我想你的问题是记录 1 也有一个“斯图尔特”吗?
因此,您可以在 WHERE 中进行类似的检查,例如,
SELECT * FROM @T t
WHERE EXISTS (SELECT * FROM @T WHERE id = t.id AND name = 'start')
AND EXISTS (SELECT * FROM @T WHERE id = t.id AND name = 'END')
AND NOT EXISTS (SELECT * FROM @T WHERE id = t.id AND name NOT IN ('start','END'))
请注意,您可能需要考虑
- 如果您有两个“开始”行或两个“结束”行(例如,开始-开始-结束),会发生什么?您甚至可以有两个“开始”行(例如,开始-开始)吗?
- 如果你有一个空白/NULL(例如,start-NULL-end)会发生什么?
编辑:删除“如果它们出现故障会发生什么(例如,结束开始)?” 作为一个问题,因为数据中根本没有排序(例如,甚至没有隐式排序)。
推荐阅读
- spring-boot - 如何将 Spring 与 jPMN 集成?
- python - Raytune 在尝试超参数搜索时抛出错误:“模块 'pickle' 没有属性 'PickleBuffer'”
- python - df.at 出现错误 ValueError: 标量访问调用无效(获取)
- javascript - 方法 onChange 在单选按钮中不起作用
- css - 引导程序的内联关键 css 或押注 CDN 缓存加载?(Pagespeed 渲染阻止警报)
- angularjs - 依次解决 Promise
- python - Python mock - 修改类属性的模拟类方法
- python - Web 抓取子类或清理返回的 html
- javascript - 如何在 javascript 中访问嵌套在 JSON 中的数据?
- r - “令牌无效或过期。” 当我想从 R 获取推文数据时