具有多个条件的SQL查询组

时间:2014-09-29 13:45:52

标签: sql sql-server

暂时想不出这个问题的更好的标题,但这里是我正在使用的数据集的样本:

Token                                   Buyer            Amount
---------------------------------------------------------------
F3D4A490-03C9-450E-873B-3B70E68FA65B    Company B        1.50
F3D4A490-03C9-450E-873B-3B70E68FA65B    Company C        0.99
A85677D8-C5A9-4766-8628-AADD769240C2    Company A        3.14
A85677D8-C5A9-4766-8628-AADD769240C2    Company B        2.44
FB72BEE1-194C-48D3-8EC1-669776E8924C    Company C        2.01
E9FFACBF-F9B1-4278-B49D-42E605F21D28    Company B        1.25

我需要获取符合以下两个条件之一的令牌值列表:

  • 数据集中只存在一个特定的令牌。
  • 该特定令牌不止一个,但“买方”值均不是“公司A”。

在这种情况下,我想要的结果集将包含以下内容:

F3D4A490-03C9-450E-873B-3B70E68FA65B
FB72BEE1-194C-48D3-8EC1-669776E8924C 
E9FFACBF-F9B1-4278-B49D-42E605F21D28

基于拥有单个令牌获取列表非常简单。我可以用一个HAVING COUNT(*)= 1做一个GROUP BY。这是给我带来麻烦的第二个条件。

此解决方案不考虑性能,这是我将要运行的一次性查询。

1 个答案:

答案 0 :(得分:4)

SELECT Token
FROM   TableName
GROUP BY Token
HAVING COUNT(*) = 1

UNION ALL

SELECT Token
FROM   TableName
WHERE  Token NOT IN
       (
           SELECT Token
           FROM   TableName
           WHERE  Buyer = 'Company A'
       )
GROUP BY Token
HAVING COUNT(*) > 1