【发布时间】:2014-02-28 19:57:02
【问题描述】:
我正在将数据写入表并为每批写入的数据分配一个“组 ID”。为了说明,请考虑下表。
GroupId Value
------- -----
1 a
1 b
1 c
2 a
2 b
3 a
3 b
3 c
3 d
在此示例中,有三组数据,每组数据具有相似但不同的值。
如何查询此表以查找包含给定值集的组?例如,如果我查询 (a,b,c),结果应该是第 1 组。同样,查询 (b,a) 应该导致第 2 组,查询 (a,b,c,e)应该导致空集。
我可以编写一个执行以下步骤的存储过程:
- 从 Groups 中选择不同的 GroupId -- 并在本地存储
- 对于每个不同的 GroupId:在输入值和表值(对于组)之间执行集合差异 (
except),反之亦然 - 如果两个集合差异操作产生空集合,则返回 GroupId
这似乎有点过分,我希望利用 SQL 中的一些其他命令来简化。有没有更简单的方法在这种情况下执行集合比较,或者选择包含查询的确切输入值的组 ID?
【问题讨论】:
标签: sql sql-server grouping set-operations