zoukankan      html  css  js  c++  java
  • 【交流】SQL 2005溢用之:分拆列值(转)

    问题描述:

    有表tb, 如下:

    id          values

    ----------- -----------

    1           aa,bb

    2           aaa,bbb,ccc

    欲按,分拆values分拆后结果如下:

    id          value

    ----------- --------

    1           aa

    1           bb

    2           aaa

    2           bbb

    2           ccc

     

    1. 旧的解决方法

    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. 新的解决方法

    -- 示例数据

    DECLARE @t TABLE(id int, [values] varchar(100))

    INSERT @t SELECT 1, 'aa,bb'

    UNION ALL SELECT 2, 'aaa,bbb,ccc'

     

    -- 查询处理

    SELECT

        A.id, B.value

    FROM(

        SELECT id, [values] = CONVERT(xml,

                '<root><v>' + REPLACE([values], ',', '</v><v>') + '</v></root>')

        FROM @t

    )A

    OUTER APPLY(

        SELECT value = N.v.value('.', 'varchar(100)')

        FROM A.[values].nodes('/root/v') N(v)

    )B

     

    /*--结果

    id          value

    ----------- --------

    1           aa

    1           bb

    2           aaa

    2           bbb

    2           ccc

     

    (5 行受影响)

    --*/

  • 相关阅读:
    Consul注销实例
    sql优化基础篇
    linux下执行java类(运行java定时器)
    ExecutorService 的理解与使用
    精度计算的方法
    内部类详解
    接口的作用
    面向对象之继承和组合浅谈
    构造器前篇
    教师编制考试数据分析
  • 原文地址:https://www.cnblogs.com/qanholas/p/2517629.html
Copyright © 2011-2022 走看看