zoukankan      html  css  js  c++  java
  • 【SQL精彩语句】分拆列值

     1 --分拆列值 
     2 --原著:邹建 
     3 --改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 2007-12-16 广东深圳
     4 
     5 --有表tb, 如下: 
     6 --id value 
     7 ------------- ----------- 
     8 --1 aa,bb 
     9 --2 aaa,bbb,ccc 
    10 --欲按id,分拆value列, 分拆后结果如下: 
    11 --id value 
    12 ------------- -------- 
    13 --1 aa 
    14 --1 bb 
    15 --2 aaa 
    16 --2 bbb 
    17 --2 ccc 
    18 
    19 --1. 旧的解决方法(sql server 2000) 
    20 SELECT TOP 8000 id = IDENTITY(int11INTO # FROM syscolumns a, syscolumns b
    21 
    22 SELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id) 
    23 FROM tb A, # B 
    24 WHERE SUBSTRING(',' + A.[values], B.id, 1= ','
    25 
    26 DROP TABLE #
    27 
    28 --2. 新的解决方法(sql server 2005) 
    29 create table tb(id int,value varchar(30)) 
    30 insert into tb values(1,'aa,bb'
    31 insert into tb values(2,'aaa,bbb,ccc'
    32 go 
    33 SELECT A.id, B.value 
    34 FROM
    35 SELECT id, [value] = CONVERT(xml,' <root> <v>' + REPLACE([value]','' </v> <v>'+ ' </v> </root>'FROM tb 
    36 )A 
    37 OUTER APPLY( 
    38 SELECT value = N.v.value('.''varchar(100)'FROM A.[value].nodes('/root/v') N(v) 
    39 )B
    40 
    41 DROP TABLE tb
    42 
    43 /* 
    44 id value 
    45 ----------- ------------------------------ 
    46 1 aa 
    47 1 bb 
    48 2 aaa 
    49 2 bbb 
    50 2 ccc
    51 
    52 (5 行受影响)
    53 */
  • 相关阅读:
    .net core项目iis10上出现 HTTP 错误 500.19,错误代码:0x8007000d
    redis安装
    【Docker】来自官方映像的 6 个 Dockerfile 技巧
    vi编辑器内上下左右健变ABCD的修复方法
    linux下安装ping命令
    Managing Chef Cookbooks the Berkshelf way
    chef学习杂记
    源代码与二进制异同
    chef 配置之 Templates
    shell ${}的使用
  • 原文地址:https://www.cnblogs.com/temptation/p/2332348.html
Copyright © 2011-2022 走看看