因此,我尝试通过按一列分组的多行的值来过滤一个表,这些行与按列分组的另一个表的多行相匹配。例如:
###Table1###
+--------+-------+
| Symbol | Value |
+--------+-------+
| A | 1 |
| A | 2 |
| A | 3 |
| B | 9 |
| B | 8 |
+--------+-------+
###Table2###
+--------+-------+
| Symbol | Value |
+--------+-------+
| C | 9 |
| C | 8 |
| D | 1 |
| D | 2 |
| D | 4 |
| E | 9 |
| E | 8 |
| F | 1 |
| F | 2 |
| F | 3 |
+--------+-------+
查询需要返回 C、E 和 F,但不返回 D,因为 A 的值与 F 的值匹配,B 的值与 C 和 E 的值匹配。
我希望这是有道理的。
最佳答案
您可以通过根据值连接表格然后计算符号来获得匹配。对于您的数据,这应该有效:
select t2.symbol, t1.symbol
from (select t1.*, count(*) over (partition by symbol) as cnt
from table1 t1
) t1 join
table2 t2
on t1.value = t2.value
group by t1.symbol, t2.symbol, t1.cnt;
having count(*) = t1.cnt
这假设:
- 两个表中都没有重复项。
- 您正在
table2
中查找与table1
匹配的行,但table2
可能包含table1
中没有的其他值>.
关于sql - T-SQL 将一组行与其他行组进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375095/