多次插入行的副本,更改了1列

时间:2015-06-09 14:14:26

标签: sql sql-server

我有桌子

+---------------------+
| ID | Code | Amount  |
+---------------------+
| 1  | 101  | 1.2     | 
| 2  | 101  | 1.3     |
| 3  | 101  | 1.3     |
| 4  | 101  | 1.4     |
| 5  | 101  | 1.2     |
| 6  | 101  | 1.5     |
| 7  | 101  | 1.4     |
| 8  | 101  | 1.3     |
| 9  | 101  | 1.1     |
| 10 | 101  | 1.0     |
+---------------------+

我正在尝试使用唯一ID复制每行约20次并更改

所以我的输出应该是这样的。

+---------------------+
| ID | Code | Amount -|
+---------------------+
| 1  | 101  | 1.2     |
| 1  | 102  | 1.2     | 
| 1  | 103  | 1.2     | 
| 1  | 104  | 1.2     |  
| 1  | 105  | 1.2     |
| 1  | 106  | 1.2     |
| 1  | 107  | 1.2     |
| 1  | 108  | 1.2     |
| 1  | 109  | 1.2     |
| 1  | 110  | 1.2     |
| 1  | 115  | 1.2     |
| 1  | 118  | 1.2     |
| 1  | 121  | 1.2     |
| 1  | 119  | 1.2     | 
| 2  | 101  | 1.3     | 
| 2  | 102  | 1.3     | 
| 2  | 103  | 1.3     | 
| 2  | 104  | 1.3     | 
+---------------------+

表等等。每个ID的代码都是相同的。它们不像我上面的示例表那样,所以我需要在某个地方对它们进行硬编码。我需要为每个ID添加20个代码。金额将是相同的。 ID将是相同的。但代码总是会有所不同。

我需要更新此表以反映这一点。

我无法做到这一点。我可以复制一次这一行。然后更改代码。但我只能为第一个ID做这个,我不能再做了。帮助是非常苛刻的。

谢谢,

2 个答案:

答案 0 :(得分:1)

使用附加代码创建一个简单的1列表。

CREATE TABLE AdditionalCodes (Code int)

INSERT INTO AdditionalCodes VALUES (102), (103), (104), (105)

现在您要做的就是将此表与原始表连接,然后插入结果。

INSERT INTO MyTable (ID, Code, Amount)
SELECT t.ID, c.Code, t.Amount
FROM MyTable t, AdditionalCodes c

答案 1 :(得分:1)

您可以使用CTE或子查询来定义代码。以下是使用VALUES()的方法:

select t.id, c.code, t.amount
from thetable t cross join
     (values(101), (102), (103), . . . ) codes(code);