在SQL中生成2个列值之间的序列

m3eecexj  于 2022-10-22  发布在  其他
关注(0)|答案(1)|浏览(193)

我有一个结构如下的表格:
|FromAccount|ToAccount|团队|位置|
| ------------ | ------------ | ------------ | ------------ |
|100|150|a|5|
|151|300|b|4|
|301|322|c|4|
我想在表上运行一个SQL查询,该查询将返回FromAccount到ThruAccount的+1系列,其中包含属于该系列的Team和Location列。我认为这个表应该是这样的,其中为From Thru Span中的每个+1值返回一条记录。
|帐户|团队|位置|
| ------------ | ------------ | ------------ |
|100|a|5|
|101|a|5|
|102 |a |5|
| ... | ... | ... |
| ... | ... | ... |
|149|a|5|
|150|a|5|
|151|b|4|
|152|b|4|
| ... | ... | ... |
|300|c|4|
| ... | ... | ... |
|321|c|4|
|322|c|4|
这可以在SQL Server中完成吗?

xuo3flqw

xuo3flqw1#

假设101只是由于输入错误而丢失,我们可以使用递归CTE来生成从最低到最高的所有数字,然后将它们连接起来。

  1. DECLARE @min int, @max int;
  2. SELECT @min = MIN(FromAccount), @max = MAX(ToAccount)
  3. FROM dbo.TableName;
  4. WITH n(n) AS (SELECT @min UNION ALL
  5. SELECT n+1 FROM n WHERE n < @max
  6. )
  7. SELECT Account = n.n,
  8. t.Team, t.Location
  9. FROM dbo.TableName AS t
  10. INNER JOIN n
  11. ON n.n BETWEEN t.FromAccount AND t.ToAccount
  12. OPTION (MAXRECURSION 0);

相关问题