我想要那些 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
我正在使用exists但得到了我的結果。預期結果是——
ID
101
uj5u.com熱心網友回復:
在NOT EXISTS子句中使用子查詢,通過 ID 將子查詢表鏈接到外部查詢表:
SELECT DISTINCT T1.ID
FROM dbo.TEST AS T1
WHERE NOT EXISTS (
SELECT *
FROM dbo.TEST AS T2
WHERE T1.ID = T2.ID
AND T2.ORGORDER = 1
)
資料庫<>小提琴
uj5u.com熱心網友回復:
一個選項是使用帶有合適的 HAVING 子句的聚合,例如
SELECT [Id]
FROM [dbo].[TEST]
GROUP BY [Id]
HAVING SUM(CASE WHEN [ORGORDER] = 1 THEN 1 ELSE 0 END) = 0
如果相關列([ORGORDER])至少有一個等于 1 的值,那么該[Id]列將不會作為結果列出。
Demo
uj5u.com熱心網友回復:
您可以通過一次資料執行此操作,并首先對所有 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;
- 示例資料庫<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349935.html
標籤:sql sql-server 查询语句
上一篇:為什么默認INT(11)
