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)
以上是我们期望看到的,每个ID都BatchID与它相关联(区分每个记录的其他列与此问题无关).
我们遇到了一些问题,我们发现并非所有情况都是如此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返回的是没有结果的.
使用聚合并计算每个不同批次的数量ID:
SELECT ID
FROM yourTable
GROUP BY ID
HAVING COUNT(DISTINCT BatchID) > 1;
Run Code Online (Sandbox Code Playgroud)