隨筆-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
          主站蜘蛛池模板: 唐山市| 德格县| 和硕县| 星座| 邯郸县| 刚察县| 澄城县| 普陀区| 阜宁县| 平原县| 江门市| 固始县| 临武县| 德昌县| 曲松县| 玉树县| 蒙自县| 阳江市| 芜湖市| 辽宁省| 江西省| 台东县| 惠东县| 辽阳市| 云安县| 嘉荫县| 贵阳市| 广西| 泗洪县| 普定县| 台中县| 慈利县| 宁强县| 乌兰浩特市| 星座| 磴口县| 本溪市| 顺平县| 龙井市| 泰州市| 开鲁县|