mysql多字段内容并到单字段中的操作
程序员文章站
2022-07-04 22:39:15
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
统计合并列中的个数
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);