我有一个单列表, 我想修改原始表中的行并将它们作为新行插入。
originalTable - >| xyz |
--------
| abc1 |
需要一位sql专家将此查询重构为单个sql查询(如果可能的话)(这是我想要的,
1)这里我创建两个独立的临时表来进行所有处理
2)然后将它们连接到原始表
如果我可以在一个语句中执行以下所有查询,我想要消除这些表的创建。
create table #tmp1(
xyz varchar(10)
)
create table #tmp2(
xyz varchar(10)
)
insert into #tmp1 (xyz)
select xyz from originalTable
insert into #tmp2 (xyz)
select xyz from originalTable
update #tmp1(xyz)
select xyz = (SUBSTRING(xyz, 1, 8)) || 'P'
update #tmp2(xyz)
select xyz = (SUBSTRING(xyz, 1, 8)) || 'R'
insert into #originalTable (xyz)
select xyz from #tmp_1
UNION
select xyz from #tmp_2
originalTable - > | xyz |
--------
| abc1 |
| abcP |
| abcR |
答案 0 :(得分:3)
只需编写一个返回所有子字符串连接的查询,并将其用作INSERT
语句中的源。
INSERT INTO originalTable (xyz)
SELECT (SUBSTRING(xyz, 1, 8)) || 'P'
FROM originalTable
UNION
SELECT (SUBSTRING(xyz, 1, 8)) || 'R'
FROM originalTable