基于列值的重复行
Duplicate row based in column value
当一列中有多个值时,我需要复制行。
例子:
A B 12 I76J-I76H=>
A B 12 I76J
A B 12 I76H
谢谢。
感谢用户@RichardTheKiwi 提供大部分代码HERE
无论如何,这是代码。如果您想更改 sql 以使其不会基于 - 只需将所有 - 替换为您选择的字符即可。
正在创建 table:
create table Testdata(Data1 varchar(50), Data2 varchar(50), Data3 int, Data4 varchar(max))
insert Testdata select 'A', 'E', '9', 'I76J-I76H-I76I-I76G'
insert Testdata select 'B', 'F', '8', 'I76J-I76H-I76I'
insert Testdata select 'C', 'G', '7', 'I76J-I76H'
insert Testdata select 'D', 'H', '6', 'I76J'
现更新原table测试数据
;with tmp(Data1, Data2, Data3, DataItem, Data4) as (
select Data1, Data2, Data3, LEFT(Data4, CHARINDEX('-',Data4+'-')-1),
STUFF(Data4, 1, CHARINDEX('-',Data4+'-'), '')
from Testdata
union all
select Data1, Data2, Data3, LEFT(Data4, CHARINDEX('-',Data4+'-')-1),
STUFF(Data4, 1, CHARINDEX('-',Data4+'-'), '')
from tmp
where Data4 > ''
)
INSERT INTO Testdata
select Data1, Data2, Data3, DataItem AS Data4
from tmp
order by Data1
DELETE FROM Testdata
where Data4 like '%-%'
select * FROM TESTDATA
当一列中有多个值时,我需要复制行。 例子:
A B 12 I76J-I76H=>
A B 12 I76J
A B 12 I76H
谢谢。
感谢用户@RichardTheKiwi 提供大部分代码HERE
无论如何,这是代码。如果您想更改 sql 以使其不会基于 - 只需将所有 - 替换为您选择的字符即可。
正在创建 table:
create table Testdata(Data1 varchar(50), Data2 varchar(50), Data3 int, Data4 varchar(max))
insert Testdata select 'A', 'E', '9', 'I76J-I76H-I76I-I76G'
insert Testdata select 'B', 'F', '8', 'I76J-I76H-I76I'
insert Testdata select 'C', 'G', '7', 'I76J-I76H'
insert Testdata select 'D', 'H', '6', 'I76J'
现更新原table测试数据
;with tmp(Data1, Data2, Data3, DataItem, Data4) as (
select Data1, Data2, Data3, LEFT(Data4, CHARINDEX('-',Data4+'-')-1),
STUFF(Data4, 1, CHARINDEX('-',Data4+'-'), '')
from Testdata
union all
select Data1, Data2, Data3, LEFT(Data4, CHARINDEX('-',Data4+'-')-1),
STUFF(Data4, 1, CHARINDEX('-',Data4+'-'), '')
from tmp
where Data4 > ''
)
INSERT INTO Testdata
select Data1, Data2, Data3, DataItem AS Data4
from tmp
order by Data1
DELETE FROM Testdata
where Data4 like '%-%'
select * FROM TESTDATA