欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql多字段内容并到单字段中的操作

程序员文章站 2022-04-10 13:59:41
set @rn=0; SELECT @rn:=@rn+1 序号, ryxm `人员姓名`, cylb `成员类别`, gzdw `工作单位`, zc `职称`, GROUP_CONCAT(zzqmc) AS `著作权名称`--多字段合并到一起 FROM (SELECT VCA.ryxm ryxm, ......
 set @rn=0; 
 select
     @rn:=@rn+1 序号,
     ryxm `人员姓名`,
     cylb `成员类别`,
    gzdw `工作单位`,
     zc `职称`,
     group_concat(zzqmc) as `著作权名称`--多字段合并到一起
 from
     (select
         vca.ryxm ryxm,
         vca.cylb cylb,
         vca.gzdw gzdw,
         vca.zc zc,
         vc.zzqmc zzqmc
 
     from v_copyright as vc ,v_copyright_author as vca  
     where vc.id=vca.zzqid)d
 group by ryxm,cylb,gzdw,zc

mysql多字段内容并到单字段中的操作

统计合并列中的个数

drop function gettextcount //
 
/**********
-- 获取字符串中有几个部分.
**********/
create function gettextcount(psourcetext  varchar(255),  pdivchar  char(1))
returns tinyint
begin
    -- 预期结果. 
    declare vresult tinyint;
    -- 当前逗号的位置.
    declare vindex int;
    -- 前一个逗号的位置.
    declare vprevindex int;
 
    -- 结果的初始值.
    set vresult = 1;
 
    -- 查询第一个 逗号的位置.
    set vindex = instr(psourcetext, pdivchar);
    if vindex = 0 then
        -- 参数中没有逗号,直接返回.
        return vresult;
    end if;
 
    -- 初始化情况,前一个逗号不存在.
    set vprevindex = 0;
 
    -- 循环处理。
    while vindex > 0 do
        -- 结果递增.
        set vresult = vresult + 1;    
        -- 前一个逗号的位置 = 当前逗号的位置
        set vprevindex = vindex;
        -- 查询下一个逗号的位置.
        set vindex = locate(pdivchar,  psourcetext,  vprevindex + 1);
    end while;
 
    -- 返回结果.
    return vresult;
end;

-- 查询结果.
select
gettextcount(zzqmc,',')
from perso
/********** 显示合并列的内容及个数**********/
/********** -- 获取字符串中具体某一个部分的数据. **********/ create function gettextvalue(psourcetext varchar(255), pdivchar char(1), pindex tinyint) returns varchar(255) begin -- 预期结果. declare vresult varchar(255); if pindex = 1 then select substring_index(psourcetext, pdivchar, 1) into vresult; else select replace( substring_index(psourcetext, pdivchar, pindex), concat(substring_index(psourcetext, pdivchar, pindex - 1) , pdivchar), '') into vresult; end if; -- 返回. return vresult; end; select gettextvalue(t.name, ',', maxnum.no) as `名称`, count(*) as `个数` from person t, (select 1 no union all select 2 no union all select 3 no union all select 4 no union all select 5 no ) maxnum where gettextcount(t.name, ',') >= maxnum.no group by gettextvalue(t.name, ',', maxnum.no);