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 行受影响)

    --*/

  • 相关阅读:
    【简●解】POJ 1845 【Sumdiv】
    【简●解】 LG P2730 【魔板 Magic Squares】
    团队会议01
    【随手记】原型展示+电梯演讲
    发际线总和我作队-第一次视频会议
    团队项目-记账App
    人生第一篇博客 , 当然是经典的 "Hello World"
    窗体评分系统
    优化MySchool数据库设计总结
    相关子查询
  • 原文地址:https://www.cnblogs.com/qanholas/p/2517629.html
Copyright © 2011-2022 走看看