1

现有表如下:

tmc         speed
ABC         55
DEF         55

我想使用 SQL Server 2008 中的现有表创建如下表:

tmc            speed
ABC            55
ABC            56
ABC            57
ABC            58
ABC            59
ABC            60
DEF            55
DEF            56
DEF            57
DEF            58
DEF            59
DEF            60

我开发的代码没有显示我想要的确切结果。任何帮助将不胜感激。

我用来解决问题的代码是:

; WITH mycte AS 
( SELECT [tmc_code], [speed] FROM table_1 
  UNION ALL 
  SELECT [tmc_code], [speed]+1 FROM table_1 WHERE [speed]+1 <=60 ) 
SELECT [tmc_code], [speed] FROM mycte 
4

2 回答 2

2

你在寻找这样的东西吗?

;WITH mycte AS (
  SELECT 1 n
  UNION ALL
  SELECT n + 1 FROM mycte WHERE n < 100
)
SELECT tmc_code, speed + n - 1 speed
  FROM table1 CROSS JOIN mycte
 WHERE mycte.n BETWEEN 1 AND 6
 ORDER BY tmc_code, speed

输出:

| TMC_CODE | 速度 |
|---------|--------|
| 美国广播公司 | 55 |
| 美国广播公司 | 56 |
| 美国广播公司 | 57 |
| 美国广播公司 | 58 |
| 美国广播公司 | 59 |
| 美国广播公司 | 60 |
| 防御工事 | 55 |
| 防御工事 | 56 |
| 防御工事 | 57 |
| 防御工事 | 58 |
| 防御工事 | 59 |
| 防御工事 | 60 |

这是SQLFiddle演示

于 2013-10-03T02:05:56.367 回答
0

考虑一个持久化的数字表,它可以有很多用途,包括您当前的问题。

使用数字表,您可以执行以下操作:

SELECT
  t.tmc_code,
  speed = t.speed + n.Number
FROM table_1 AS t
INNER JOIN numbers AS n ON n.Number BETWEEN t.speed AND t.speed + 5
;
于 2013-10-03T08:10:33.223 回答