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

标签 sql sql-server compare rows

因此,我尝试通过按一列分组的多行的值来过滤一个表,这些行与按列分组的另一个表的多行相匹配。例如:

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

相关文章:

MySQL 查询返回值属于该组的所有组

mysql - 多选用户名 SQL

mysql - SQL 以任意顺序搜索单词

java - 比较两个字符串值并返回其在 java 中的索引

asp.net-mvc - ASP.Net动态数据还是MVC2?

php - 根据排名位置计算分数

mysql - 在加入 Sql 之间时如何用例

sql-server - 将触发表上的更新将是递归的

sql-server - 我如何在 where 语句中使用 Count(*)?

ruby - 如何让 Ruby 将字符串的索引视为字符(而不是 ASCII 代码)?