检查每组所有行的两列是否相等
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
等于 Attribute2
。 4
未返回,因为虽然样本中的最后一条记录确实符合标准(因为 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
您可以使用 HAVING
和 CASE
:
SELECT [Date]
FROM #tab
GROUP BY [Date]
HAVING SUM(CASE WHEN Attribute1 = Attribute2 THEN 0 ELSE 1 END) = 0
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
假设数据库是这样的:
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
等于 Attribute2
。 4
未返回,因为虽然样本中的最后一条记录确实符合标准(因为 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
您可以使用 HAVING
和 CASE
:
SELECT [Date]
FROM #tab
GROUP BY [Date]
HAVING SUM(CASE WHEN Attribute1 = Attribute2 THEN 0 ELSE 1 END) = 0
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