【发布时间】:2021-12-01 13:33:47
【问题描述】:
我有一个看起来像这样的数据集
| Position | Value |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 8 |
| 3 | 5 |
| 3 | 6 |
我想在每个位置生成所有字符串组合。
对于这个例子,输出看起来像
| Output |
|---|
| 185 |
| 285 |
| 385 |
| 186 |
| 286 |
| 386 |
顺序并不特别重要。
注意:每个组可以有任意数量的组和值。
以下 SQL 设置示例输入。
Declare @Table Table
(
groupId int,
value int
)
Insert Into @Table
Select 1,1
union select 1,2
union select 1,3
union select 2,8
union select 3,5
union select 3,6
Select
*
From
@Table
【问题讨论】:
-
我不太理解所提供示例的问题,但如果您确实想要与“所有组合”相关的内容,则必须执行笛卡尔积。使用 sql server 正在使用 sintax
CROSS JOIN -
@James 交叉连接的问题是(据我所知)它不会动态处理任意数量的组。我必须为每个组编写一个交叉连接。
-
这是个好问题。我的看法——我不是 100% 确定——这不能通过单个查询来完成。也许它可以只用非常有限的组来完成。无论如何,由于解决方案需要迭代,因此使用自定义函数似乎非常简单。看起来并不令人生畏。
-
你的 SQL Server 版本是多少?
-
@ub_coding 18.6
标签: sql sql-server combinations