隨筆-199  評論-203  文章-11  trackbacks-0
          分拆列值

          原著:鄒建
          改編:愛新覺羅.毓華(十八年風雨,守得冰山雪蓮花開) 
          2007-12-16  廣東深圳

          有表tb, 如下:
          id          value
          ----------- -----------
          1          aa,bb
          2          aaa,bbb,ccc
          欲按id,分拆value列, 分拆后結果如下:
          id          value
          ----------- --------
          1          aa
          1          bb
          2          aaa
          2          bbb
          2          ccc

          1. 舊的解決方法(sql server 2000)
          SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b

          SELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id)
          FROM tb A, # B
          WHERE SUBSTRING(',' + A.[values], B.id, 1) = ','

          DROP TABLE #

          2. 新的解決方法(sql server 2005)

          create table tb(id int,value varchar(30))
          insert into tb values(1,'aa,bb')
          insert into tb values(2,'aaa,bbb,ccc')
          go
          SELECT A.id, B.value
          FROM(
             
          SELECT id, [value] = CONVERT(xml,' <root> <v>' + REPLACE([value], ',', ' </v> <v>') + ' </v> </root>') FROM tb
          )A
          OUTER APPLY(
             
          SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)
          )B

          DROP TABLE tb

          /*
          id          value
          ----------- ------------------------------
          1          aa
          1          bb
          2          aaa
          2          bbb
          2          ccc

          (5 行受影響)
          */
          posted on 2009-03-11 08:44 Werther 閱讀(1044) 評論(0)  編輯  收藏 所屬分類: 15.SQL Server
          主站蜘蛛池模板: 岳阳市| 堆龙德庆县| 都安| 双峰县| 灵台县| 甘肃省| 绥宁县| 微博| 五华县| 青河县| 东乌珠穆沁旗| 奉化市| 安化县| 大荔县| 碌曲县| 酉阳| 两当县| 云龙县| 麟游县| 酒泉市| 沾益县| 贵港市| 松溪县| 阳高县| 迁西县| 勐海县| 霍山县| 五寨县| 黎城县| 云南省| 抚州市| 张家口市| 阿图什市| 比如县| 泉州市| 册亨县| 九台市| 邹城市| 嘉峪关市| 普兰店市| 大埔县|