根据列值添加额外的行(SQL)

时间:2015-08-10 21:35:48

标签: sql sql-server

Year    Life    Method
1         9       x
2         9       x
4         9       x
2         10      y
4         10      y

表A
我有上面的表格。

我想得到如下。

Year    Life    Method
1        9        x
2        9        x
3        9        x
4        9        x
5        9        x
1       10        y
2       10        y
3       10        y
4       10        y
5       10        y

表B
意思是说每个生命和方法都有1到5年。

如何使用SQL查询使用表B创建表B.

任何想法?

2 个答案:

答案 0 :(得分:1)

 select b.yr, a.life, a.method 
 from (select distinct life,method from tableA) a,
 (select 1 union select 2 union select 3 union select 4 union select 5) b

这将进行交叉连接并获得所需的结果。

编辑:创建临时表以处理多年值

DROP TABLE Numbers;
CREATE TABLE Numbers (Num INT NOT NULL);
DECLARE @x INT;
SELECT @x = 1;
WHILE @x <= 60 
BEGIN
INSERT INTO Numbers(Num) VALUES (@x);
SELECT @x = @x + 1;
END;

然后查询

select n.yr, a.life, a.method 
from (select distinct life,method from tableA) a,
Numbers n

如果您必须临时执行此操作,也可以使用上面显示的union语句。

select 1 union select 2 union ...union select n

答案 1 :(得分:0)

假设method life具有相同的值,那么您可以执行以下操作:

with nums as (
      select row_number() over (order by (select null)) as n
      from master..spt_values
     )
select n.n as year, l.life, l.method
from nums n cross join
          (select life, method from table t) l 
where n.n <= 5;