假设这样的数据库:
Date | Attribute1 | Attribute2 | ... | AttributeN
-------------------------------------------------
1 | A | C | ... | ...
1 | B | C | ... | ...
2 | A | A | ... | ...
2 | B | B | ... | ...
2 | A | A | ... | ...
3 | B | B | ... | ...
3 | A | A | ... | ...
4 | B | C | ... | ...
4 | A | A | ... | ...
我试图找到哪些唯一的日期(在实际情况下,它们是实际的
date
,但我认为不重要),Attribute1
的所有元素都等于其在Attribute2
中的相应元素。上面的示例数据的结果将是Date
----
2
3
因为对于每个
date
等于2
(和3
相同)的记录,Attribute1
等于Attribute2
。不会返回4
,因为尽管样本中的最后一条记录确实符合标准(因为A
等于A
),但是第二条最后一条记录却没有(因为B
不等于C
)。我不知道如何写此查询,我希望有一些聚合函数(在下面的代码中显示为
ALL(...)
),该函数可以使我编写如下内容:SELECT Date
FROM myTable
GROUP BY Date
HAVING ALL(Attribute1 = Attribute2)
有这样的功能吗?否则,也许有一种使用
COUNT
的聪明方法吗? 最佳答案
您可以使用HAVING
和CASE
:
SELECT [Date]
FROM #tab
GROUP BY [Date]
HAVING SUM(CASE WHEN Attribute1 = Attribute2 THEN 0 ELSE 1 END) = 0
LiveDemo
否则,也许有使用COUNT的巧妙方法吗?
为什么不:)带有
COUNT
的版本:SELECT [Date]
FROM #tab
GROUP BY [Date]
HAVING COUNT(CASE WHEN Attribute1 <> Attribute2 THEN 1 END) = 0
LiveDemo2