假设这样的数据库:

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的聪明方法吗?

最佳答案

您可以使用HAVINGCASE:

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

10-06 14:01