我有一个包含三列的表格,标识带有身份,名称和位置的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
答案 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)