T-SQL将一组行与其他行组进行比较

时间:2015-07-13 03:42:46

标签: sql sql-server compare rows

所以我试图按一个列分组的多行的值来过滤一个表,这些行匹配另一个表的多行,这些行按列分组。对于Exmaple:

###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的值匹配。

我希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

您可以通过连接值的表格然后计算符号来获得匹配。对于您的数据,这应该有效:

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以外的其他值。