SQL Server Microsoft SQL查询,用于标识尚未创建的记录

ztigrdn8  于 2023-01-12  发布在  其他
关注(0)|答案(2)|浏览(125)

我很难解释这一点,所以我提前道歉。我在Microsoft SQL数据库中有一个表包含重复记录。在某些情况下,每个重复记录都应该包含至少1行,其中C列的值为“是”。
如何查询尚不存在的记录?
表t:

| Column A | Column B | Column C |
| -------- | -------- | -------- |
| 1        | Cat      | No       |
| 2        | Cat      | No       |
| 3        | Cat      | No       |
| 4        | Dog      | Yes      |
| 5        | Dog      | No       |
| 6        | Fox      | No       |
| 7        | Fox      | No       |

预期输出如下所示:

| Column A | Column B | Column C    |
| -------- | -------- | --------    |
| 1        | Cat      | Missing Yes |
| 2        | Fox      | Missing Yes |

我尝试基于网上找到的示例使用NOT IN,但没有返回期望的结果。

SELECT Column B
FROM t
WHERE Column C NOT IN
(SELECT Column B
 FROM t
 WHERE Column C = 'Yes'
 )
zxlwwiss

zxlwwiss1#

可以使用公用表表达式解决此问题

WITH cte AS (
  SELECT ColumnA, ColumnB, ColumnC
  FROM t
)

SELECT ColumnA, ColumnB, 'Missing Yes' as ColumnC
FROM cte
GROUP BY ColumnB
HAVING SUM(CASE WHEN ColumnC = 'Yes' THEN 1 ELSE 0 END) = 0

更多here

5n0oy7gb

5n0oy7gb2#

我看到您已经接受了这个问题的答案,但是如果您只是想要一个不包含YES的B列值的不同列表,那么这可能是一个替代解决方案:

CREATE TABLE #tmp(ColumnA int,ColumnB varchar(10),ColumnC varchar(5))
INSERT INTO #tmp VALUES
(1,'Cat','No'),
(2,'Cat','No'),
(3,'Cat','No'),
(4,'Dog','Yes'),
(5,'Dog','No'),
(6,'Fox','No'),
(7,'Fox','No'),
(8,'Dog','No')

SELECT ColumnB, 'Missing Yes' ColumnC
FROM #tmp t1
WHERE NOT EXISTS(SELECT 1 FROM #tmp t2 WHERE t1.ColumnB = t2.ColumnB and t2.ColumnC = 'YES')
GROUP BY ColumnB
HAVING COUNT(*) > 1

相关问题