sql - 如何在自连接中使用 Exists
问题描述
我想要Orgorder永远不等于1的那些Id。
CREATE TABLE [dbo].[TEST](
[ORGORDER] [int] NULL,
[Id] [int] NOT NULL,
[ORGTYPE] [varchar](30) NULL,
ORGID INT NULL,
[LEAD] [decimal](19, 2) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE] ,ORGID, [LEAD]) VALUES (1, 100, N'ABC',1, NULL)
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE],ORGID, [LEAD]) VALUES (0, 100, N'ABC',2, 0)
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE],ORGID, [LEAD]) VALUES (0, 100, N'ACD',1, NULL)
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE],ORGID, [LEAD]) VALUES (0, 101, N'ABC',0, 0)
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE],ORGID, [LEAD]) VALUES (2, 101, N'ABC',4, NULL)
GO
我正在使用存在但得到我的结果。预期结果是 -
ID
101
解决方案
您可以通过一次数据传递来执行此操作,并首先订购所有 ORGORDER = 1,然后如果它是第一行并且它具有您要排除的 ORGORDER 值,则可以忽略它。
;WITH x AS
(
SELECT Id, rn = ROW_NUMBER() OVER
(PARTITION BY Id ORDER BY CASE WHEN ORGORDER = 1 THEN 1 ELSE 2 END)
FROM dbo.TEST
)
SELECT Id FROM x WHERE rn = 1 AND ORGORDER <> 1;
推荐阅读
- java - 用于自动确定哪些单元测试可能受源更改影响的 Eclipse 工具
- xcode - coreml 推理结果与 cpu 和 gpu 不同
- mongodb - MongoDB + Express 如何优化代码?
- java - RatingBar 中的星数看起来错误
- node.js - 如何将 webpack env 传递给 nodejs 应用程序?
- mongodb - mongodb update document method
- javascript - 如何从 ReactVis 系列图中选择 VerticalBarSeries?
- html - 如何在 xslt 2.0 中执行不区分大小写的属性名称
- docker - Docker 私有注册表镜像上传
- java - 选择项目后组合框中的图像消失