检查每组所有行的两列是否相等

Check if two columns are equal for all rows per group

假设数据库是这样的:

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,但我认为这不重要),ALL 元素Attribute1 中的元素等于它们在 Attribute2 中的对应元素。上述示例数据的结果为

Date
----
2
3

因为对于每个 date 等于 2 的记录(3 也是如此),Attribute1 等于 Attribute24 未返回,因为虽然样本中的最后一条记录确实符合标准(因为 A 等于 A),倒数第二条记录不符合(因为 B 不等于 C).

我不知道如何编写这个查询,我希望有一些聚合函数(在下面的代码中显示为 ALL(...)),它可以让我编写如下内容:

SELECT Date
FROM myTable
GROUP BY Date
HAVING ALL(Attribute1 = Attribute2)

有这个功能吗?否则是否有使用 COUNT 的巧妙方法?

如果你反过来,逻辑会更简单。您想要所有唯一的 DATE 值,其中 不是 行,其中 Attribute1 不同于 Attribute2:

SELECT DISTINCT [Date] FROM myTable
WHERE [Date] NOT IN (
   SELECT [Date] FROM myTable
   WHERE Attribute1 != Attribute2)

也许是这样:

select Date from Test
Except
Select Date from Test where Attribute1 <> Attribute2

您可以使用 HAVINGCASE:

SELECT [Date]
FROM #tab
GROUP BY [Date]
HAVING SUM(CASE WHEN Attribute1 = Attribute2 THEN 0 ELSE 1 END) = 0

LiveDemo

Otherwise is there a clever way to this using COUNT maybe?

为什么不 :) COUNT 的版本:

SELECT [Date]
FROM #tab
GROUP BY [Date]
HAVING COUNT(CASE WHEN Attribute1 <> Attribute2 THEN 1 END) = 0

LiveDemo2