SQL Server - 仅返回ID的查询,其中每个ID在另一列中具有不同的值

Stp*_*111 0 sql sql-server

SQL Server 2016 Enterprise - 假设我在主表上运行查询以从ID 1到5中恢复所有记录.我会得到这样的结果:

ID  Status  BatchID
1   Active  493fd8bc
1   Active  493fd8bc
1   Active  493fd8bc
1   Active  493fd8bc
1   Active  493fd8bc
2   Active  2d91c2f2
2   Active  2d91c2f2
3   Active  2a1338ac
3   Active  2a1338ac
3   Active  2a1338ac
4   Active  0c469bcc
4   Active  0c469bcc
4   Active  0c469bcc
4   Active  0c469bcc
4   Active  0c469bcc
4   Active  0c469bcc
4   Active  0c469bcc
5   Active  ca8896bd
5   Active  ca8896bd
5   Active  ca8896bd
Run Code Online (Sandbox Code Playgroud)

以上是我们期望看到的,每个IDBatchID与它相关联(区分每个记录的其他列与此问题无关).

我们遇到了一些问题,我们发现并非所有情况都是如此ID's.例如,假设我们运行相同的查询,它返回了这个:

ID  Status  BatchID
1   Active  493fd8bc
1   Active  493fd8bc
1   Active  752e8d5d
1   Active  752e8d5d
1   Active  493fd8bc
2   Active  2d91c2f2
2   Active  2d91c2f2
3   Active  f2191595
3   Active  2a1338ac
3   Active  2a1338ac
4   Active  feaf9567
4   Active  f5d64c8c
4   Active  e5eff3a2
4   Active  0c469bcc
4   Active  49e5e2f2
4   Active  0c469bcc
4   Active  e5eff3a2
5   Active  ca8896bd
5   Active  ca8896bd
5   Active  ca8896bd
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们看到ID's1,3和4 BatchID都不匹配.

如果我想对所有人运行查询ID's并让它返回给我一个列表,ID's其列表中的BatchID's所有记录都不匹配ID,我将如何完成此操作?

如果我的表只包含上面第二个例子中的数据,结果将如下所示.

ID
1
3
4
Run Code Online (Sandbox Code Playgroud)

或者,如果结果作为整个记录返回,只要记录包含ID,并且每个只有一个记录,我们就会非常适合ID.在BatchID返回的是没有结果的.

Tim*_*sen 5

使用聚合并计算每个不同批次的数量ID:

SELECT ID
FROM yourTable
GROUP BY ID
HAVING COUNT(DISTINCT BatchID) > 1;
Run Code Online (Sandbox Code Playgroud)