【问题标题】:INSERT every combination of UNIQUE values without looping在不循环的情况下插入唯一值的每个组合
【发布时间】:2019-03-27 09:51:53
【问题描述】:

给定 3 个值,例如

+--------+
| values |
+--------+
|    1   |
+--------+
|    2   |
+--------+
|    3   |
+--------+

是否可以在不使用 WHILE 循环的情况下将每个值的每个 UNIQUE 组合插入到表中?

例如,最终结果如下所示:

使用嵌套的WHILE 循环执行此操作相对简单,但我想知道是否有其他方法可以使用。

【问题讨论】:

  • 最终结果表的第4行数据VALUE_2列不应该是3吗?
  • @knot22 你完全正确!很好发现,现在更新。
  • 如果您可以忍受将它们与分隔符而不是单独的值列连接在一起,您可能想看看这个:stackoverflow.com/questions/3621494/…

标签: sql-server


【解决方案1】:
declare @t table
(
  n int not null
);

insert into @t (n)
values
(1),
(2),
(3);

select * from @t;

select
value1 = t1.n,
value2 = t2.n,
value3 = t3.n
from @t t1
inner join @t t2 on t1.n <> t2.n
inner join @t t3 on t1.n <> t3.n and t2.n <> t3.n; 

【讨论】:

  • 不错的方法!因此,对于数据集中的每个值(比如我们有 30 个值而不是 3 个),您是否需要另一个自联接?
  • 对于这种方法,是的。您是在处理 30 个值而不是 3 个值吗?
  • 我正在处理任意数量的值,真的。这是一个相当假设的场景。您知道给定更多值的更合适的方法吗?我仍然认为我更喜欢这个(即使有 30 个值)而不是 WHILE 循环。
  • 正在处理的值的数量 - 该数量是在脚本执行之前已知的还是每个脚本执行时动态的值的数量?
  • 脚本执行前就知道了
猜你喜欢
  • 2019-08-14
  • 2016-09-22
  • 2020-05-11
  • 2012-04-13
  • 1970-01-01
  • 2019-11-29
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
相关资源
最近更新 更多