我有以下记录
"NO" "EXECQTY" "PRNO"
"WDNSLR/1" "10" "~PRSLR/00001~,~PRSLR/00002~,~PRSLR/00003~,~PRSLR/00004~"
并想要像这样显示
"NO" "EXECQTY" "PRNO
"WDNSLR/1" "10" "PRSLR/00001"
"WDNSLR/1" "10" "PRSLR/00002
"WDNSLR/1" "10" "PRSLR/00003
"WDNSLR/1" "10" "PRSLR/00004
注意
双引号用于显示区分列值
答案 0 :(得分:0)
好的,所以你真正需要的是将PRNO列的内容分成行并将其连接回原始表。
这就是表格:
declare @t table (NO varchar(20), EXECQTY varchar(20), PRNO varchar(100))
insert @t values ('WDNSLR/1', '10', '~PRSLR/00001~,~PRSLR/00002~,~PRSLR/00003~,~PRSLR/00004~')
这就是代码:
select t.no, t.execqty, replace(f.item, '~', '') as prno
from @t t
cross apply (
select
item = ltrim(rtrim(substring(t.prno, [number],
charindex(',', t.prno + ',', [number]) - [number])))
from (select number = row_number() over (order by name) from sys.all_objects) as x
where number <= len(t.prno) and substring(',' + t.prno, [number], len(',')) = ','
) f
它是独立的,但我建议使用真实的数字表而不是每次飞行时创建序列。此外,子查询可以很容易地转换为UDF。