隨筆-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 閱讀(1034) 評論(0)  編輯  收藏 所屬分類: 15.SQL Server
          主站蜘蛛池模板: 临洮县| 洞口县| 苗栗市| 大埔区| 上栗县| 合作市| 孙吴县| 大渡口区| 沂源县| 曲沃县| 黄梅县| 麻江县| 喜德县| 阳江市| 梧州市| 平昌县| 和硕县| 罗源县| 无锡市| 邵东县| 永安市| 营口市| 长海县| 大兴区| 泽库县| 大新县| 临安市| 洪洞县| 白玉县| 乐东| 武义县| 凤山市| 于都县| 雅安市| 灵台县| 青浦区| 浠水县| 宣恩县| 长顺县| 墨玉县| 榆中县|