用SQL Server 2008解决“一行转多行”问题的神奇方法

在编写AO应用实例时遇到要一行变多行的问题。

问题描述:现有表一,要求执行SQL后变成表二形式


      表一

 

    表二


由于sql中没有提供像C#那样的split方法,所以遍查资料,终于找到一个神奇的方法,如下:

--创建测试表

create table t1

(

    id int,

    txt varchar(30)

)

--插入测试数据

insert into t1

values(1,'aa,dd,f'),

    (2,'ddd,ff,rt,gg'),

    (3,'s,dddddee,d'),

    (4,'ty'),

    (5,'hello,dderf,kii'),

    (6,'da,ddeff,ddd,d')

    

--显示测试数据

select * from t1

    

--一行变多行的方法

select  a.id,b.txt

from

(select id,txt=convert(xml,'<root><v>'+replace(txt,',','</v><v>')+'</v></root>') from t1) a

outer apply

(select txt=C.v.value('.','nvarchar(100)') from a.txt.nodes('/root/v')C(v))b

  是的,我这里用到了sql xml,用节点符号替换了逗号,然后用 C.V.value 通过节点把他分离显示。代码简洁,功能实现!   

展开阅读全文

没有更多推荐了,返回首页