繁体   English   中英

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

[英]SQL Server - Query to return ID's only which have different values per ID in another column

SQL Server 2016企业版-假设我在主表上运行查询以从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

上面是我们希望看到的结果,以便每个ID都具有BatchID关联的相同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

在这种情况下,我们看到ID's 1、3和4的BatchID并不完全匹配。

如果我想对所有ID's进行查询,并让我返回ID's列表,而该ID's BatchID's与该ID所有记录都不匹配,我该怎么做?

如果我的表仅包含上面第二个示例中的数据,则结果将看起来像这样。

ID
1
3
4

另外,只要记录包含ID ,并且返回的结果是完整记录,并且每个ID仅包含一条记录,我们也会非常适合。 返回的BatchID

使用汇总并为每个ID计算不同批次的数量:

SELECT ID
FROM yourTable
GROUP BY ID
HAVING COUNT(DISTINCT BatchID) > 1;

如果您碰巧想要整行,则可以执行以下操作:

select t.*
from t
where exists (select 1
              from t t2
              where t2.id = t.id and t2.batchid <> t.batchid
             );

如果只需要ID,Tim的答案就是更好的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM