【发布时间】:2013-09-17 19:55:21
【问题描述】:
给定以下带有单个 char(1) 列的 SQL Server 表:
Value
------
'1'
'2'
'3'
如何在 T-SQL 中获得以下结果?
Result
------
'1+2+3'
'1+3+2'
'2+1+3'
'2+3+1'
'3+2+1'
'3+1+2'
这也需要是动态的,所以如果我的表只包含行“1”和“2”,我希望:
Result
------
'1+2'
'2+1'
似乎我应该能够使用 CROSS JOIN 来执行此操作,但是由于我不知道提前会有多少行,所以我不确定自己要 CROSS JOIN 多少次。 .?
SELECT a.Value + '+' + b.Value
FROM MyTable a
CROSS JOIN MyTable b
WHERE a.Value <> b.Value
在任何给定时间总是少于 10 行(实际上更像是 1-3 行)。我可以在 SQL Server 中即时执行此操作吗?
编辑:理想情况下,我希望这发生在单个存储过程中,但如果我必须使用另一个过程或一些用户定义的函数来实现这一点,我很好。
【问题讨论】:
-
如果有 5 个值,您希望添加这 5 个数字的所有版本,还是最多添加 3 个?
-
是的,我想要所有可能的组合,没有最大值。
-
只有不同的值?
-
@GoatCO 是的,只有不同的值。
-
这家伙似乎在做你正在寻找的事情,本质上是:stackoverflow.com/questions/3686062/…
标签: sql sql-server tsql permutation common-table-expression