2015-07-13 100 views
0

因此,我试图通过按一列分组的多个行的值筛选一个表,这些列匹配按列分组的另一个表的多行。对于〔实施例:T-SQL将一组行与其他行进行比较

###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

的值

我希望这是有道理的。

+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 

这是假设:

  • 没有重复在两个表。
  • 您正在查找与table1匹配的table2中的行,但table2可能有其他值不在table1中。
+0

我真的很欣赏这种努力,但恐怕这并不能解决问题。你看,表1中符号的所有值都必须在表2符号的值中进行匹配。你的解决方案似乎只是匹配每个潜在的价值匹配。 –

+0

@SteveBishop。 。 。我不太确定你的评论应该是什么意思。这应该是返回第二个表中的符号,它们与第一个表中的符号具有相同的值。我只是编辑了答案,因为我错放了“有”条款。也许这会造成混乱。 –

+0

是的,我没有那里的声明。这可能是问题所在。我会再次运行它,看看是否修复它。再次感谢你。 –