我需要编写一个查询,通过递增值重复行

时间:2013-10-03 07:28:24

标签: sql sql-server-2008

我有一个包含三列的表格,标识带有身份,名称和位置的ID,对于此列,我说我的值为

(1,'RAM','CA'), 
(2,'SAM','IA'),
(3,'PAM','MI')
etc....

现在要获得100行,比如在第3行之后,第4行应该再次以相同的名称和相同的位置开始,但是为它添加一个值,比如第4行将是值 (4,'RAM1','CA1'),同样,第5行为(5,'SAM1','IA1'),第6行为(6,'PAM1','MI1')。同样,对于第7行,它应该将值赋予(7,'RAM2','CA2'),依此类推。所以它应该继续这样直到第100行,因为我需要编写代码,我无法弄明白,你能不能帮助我。

谢谢, Aparanjit

2 个答案:

答案 0 :(得分:1)

试试这个:

<强> Fiddle demo

--Your table
create table t (id int identity(1,1), col1 varchar(10),
                                  col2 varchar(10))
--Insert query
insert into t
select c1 + case when number = 1 then '' else convert(varchar(10),number-1) end col1,
       c2 + case when number = 1 then '' else convert(varchar(10),number-1) end col2
from master..spt_values cross join 
    (values ('RAM','CA'),('SAM','IA'),('PAM','MI')) AS temp (c1,c2)
where type='p' and number between 1 and 100

--Results
|  ID |  COL1 | COL2 |
------|-------|------|--
| 1 |   RAM |   CA |
| 2 |   SAM |   IA |
| 3 |   PAM |   MI |
| 4 |  RAM1 |  CA1 |
| 5 |  SAM1 |  IA1 |
| 6 |  PAM1 |  MI1 |
| 7 |  RAM2 |  CA2 |
| 8 |  SAM2 |  IA2 |
| 9 |  PAM2 |  MI2 |
| 10 |  RAM3 |  CA3 |
| 11 |  SAM3 |  IA3 |
| 12 |  PAM3 |  MI3 |
...

答案 1 :(得分:0)

使用recursive CTE您可以尝试类似

的内容
DECLARE @Table TABLE(
        ID INT IDENTITY(1,1),
        [name] VARCHAR(20),
        location varchar(20)
)
INSERT INTO @Table VALUES ('RAM','CA'), ('SAM','IA'), ('PAM','MI')

DECLARE @NumberOfRows INT = 100

;WITH RowIDs AS (
        SELECT  1 RowID
        UNION ALL
        SELECT RowID + 1
        FROM    RowIDs
        WHERE   RowID + 1 <= @NumberOfRows
)
, JoinIDs AS (
        SELECT  RowID,
                ((RowID - 1) % 3 + 1) JoinID
        FROM    RowIDs
)
SELECT  j.RowID,
        t.name,
        t.location

FROM    JoinIDs j INNER JOIN
        @Table t    ON  j.JoinID = t.ID
OPTION (MAXRECURSION 0)

SQL Fiddle DEMO