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

    --*/

  • 相关阅读:
    在线程中使用OpenFileDialog
    Log4net附加
    SQL表间列根据条件复制(赋值)
    DataGridView使用
    Latex使用总结及备忘
    Windows获取文件状态
    TabControl取消首次定位焦点
    C#跨线程调用
    电子词典的查寻程序,发送和接收应答程序
    电子词典的相关子函数db.c程序
  • 原文地址:https://www.cnblogs.com/qanholas/p/2517629.html
Copyright © 2011-2022 走看看