• IT忍者神龟之中的一个句sql语句——连接同一字段的全部值


    Oracle能够用SYS_CONNECT_BY_PATH字符串聚合函数:
    SELECT LTRIM(MAX(SYS_CONNECT_BY_PATH(productname, ', ')), ', ') AS productname
    FROM(
        SELECT '1' as id, productname,
            ROW_NUMBER() OVER (PARTITION BY '1' ORDER BY productname) AS curr,
            ROW_NUMBER() OVER (PARTITION BY '1' ORDER BY productname) -1 AS prev
        FROM products
        -- where 条件
        order by productname
    )
    START WITH curr = 1
    CONNECT BY prev = PRIOR curr AND id = PRIOR id
    GROUP BY id
    
    但MS SQL 2000没有这样的函数,但能够通过自己定义函数或过程来实现.
    -- drop function ConnectString
    Create FUNCTION ConnectString( @name varchar(20) ) 
    RETURNS varchar(1024) 
    AS 
    BEGIN 
    declare @Str varchar(1024) 
    set @Str = '' 
    select @Str = @Str + (case when @Str = '' then '' else ',' end) + [productname] from products 
    --where [productname] = @name 
    return @Str 
    END 
    GO
    
    -- 调用
    select DISTINCT dbo.ConnectString(productname) from products
    
    SQL Server 2005 可用OUTER APPLY:
    下面是从网上摘录的:
    -- 演示样例数据
    DECLARE @t TABLE(id int, value varchar(10))
    INSERT @t SELECT 1, 'aa'
    UNION ALL SELECT 1, 'bb'
    UNION ALL SELECT 2, 'aaa'
    UNION ALL SELECT 2, 'bbb'
    UNION ALL SELECT 2, 'ccc'
    
    -- 查询处理
    SELECT *
    FROM(
        SELECT DISTINCT 
            id
        FROM @t
    )A
    OUTER APPLY(
        SELECT 
            [values]= STUFF(REPLACE(REPLACE(
                (
                    SELECT value FROM @t N
                    WHERE id = A.id
                    FOR XML AUTO
                ), '<N value="', ','), '"/>', ''), 1, 1, '')
    )N
    
    /*--结果
    id          values
    ----------- ----------------
    1           aa,bb
    2           aaa,bbb,ccc
    (2 行受影响)
    --*/
    2 Admin/ adminY/ 刘超楠/ 张伟如/ 单慧慧/
    3 王亦平/ 靳麟/ 杨婧/ 运营管理部资产管理员/ 刘婷/ 钟媛/ 杜佳凝/
    4 分行营业部电脑管理员A角/ 分行营业部电脑管理员B角/ 张婷婷/ 反洗钱301/ 信贷综合301/ 陈光/ 蒋喆/ 安静/ 个贷接单301/ 单立伟/ 孙晴/ 分行营业部资产管理员/ 方正/ 李晨/ 营业部企划联系人/ 李燚/
    5 李娟/ 神华支行电脑管理员A角/ 神华支行电脑管理员B角/ 王国萍/ 反洗钱302/ 信贷综合302/ 张喆/ 周小舟/ 个贷接单302/ 王兆圆/ 神华支行资产管理员/ 杨厚玮/ 神华企划联系人/
    6 安华支行电脑管理员A角/ 安华支行电脑管理员B角/ 魏红/ 反洗钱303/ 信贷综合303/ 陈盈/ 许越昆/ 陈醒/ 宛霞/ 个贷接单303/ 花园路支行资产管理员/ 乔曦/ 程瑶/ 花园路企划联系人/
    7 西三环支行电脑管理员B角/ 西三环支行电脑管理员A角/ 张永风/ 反洗钱304/ 信贷综合304/ 邓立/ 个贷接单304/ 张纪洪/ 龚鑫/ 李冬冬(304)/ 崔佳/ 西三环支行资产管理员/ 周琪/ 李菲/ 西三环企划联系人/ 张鑫/
    8 董钧玉/ 中关村支行电脑管理员B角/ 中关村支行电脑管理员A角/ 李鑫/ 反洗钱305/ 信贷综合305/ 个贷接单305/ 徐文文/ 旦蕊/ 中关村支行资产管理员/ 贾晋平/ 张莹01/ 车帅/ 中关村企划联系人/

  • 相关阅读:
    Spring Boot+Vue前后端分离(1):准备环境 +项目启动
    Git使用SSH协议clone项目及SSH简介
    Intelij ideas windows版本快捷键整理
    Spring Boot配置—— yml 配置map
    Nginx配置——多站点配置
    String分割
    Spring日志处理——logger占位符
    Java缓存经验
    maven项目——maven跳过单元测试maven.test.skip和skipTests的区别
    Java工具类——Hutool Java
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5131332.html
Copyright © 2020-2023  润新知