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

database

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

GROUPBY ryxm,cylb,gzdw,zc

统计合并列中的个数

DROPFUNCTION GetTextCount //

/**********

-- 获取字符串中有几个部分.

**********/

CREATEFUNCTION GetTextCount(pSourceText VARCHAR(255), pDivChar CHAR(1))

RETURNSTINYINT

BEGIN

-- 预期结果.

DECLARE vResult TINYINT;

-- 当前逗号的位置.

DECLARE vIndex INT;

-- 前一个逗号的位置.

DECLARE vPrevIndex INT;

-- 结果的初始值.

SET vResult =1;

-- 查询第一个 逗号的位置.

SET vIndex = INSTR(pSourceText, pDivChar);

IF vIndex =0THEN

-- 参数中没有逗号,直接返回.

RETURN vResult;

ENDIF;

-- 初始化情况,前一个逗号不存在.

SET vPrevIndex =0;

-- 循环处理。

WHILE vIndex >0 DO

-- 结果递增.

SET vResult = vResult +1;

-- 前一个逗号的位置 = 当前逗号的位置

SET vPrevIndex = vIndex;

-- 查询下一个逗号的位置.

SET vIndex = LOCATE(pDivChar, pSourceText, vPrevIndex +1);

ENDWHILE;

-- 返回结果.

RETURN vResult;

END;

-- 查询结果.
SELECT
GetTextCount(zzqmc,",")
FROM perso

/********** 显示合并列的内容及个数**********/
/**********

-- 获取字符串中具体某一个部分的数据.

**********/

CREATEFUNCTION GetTextValue(pSourceText VARCHAR(255), pDivChar CHAR(1), pIndex TINYINT)

RETURNSVARCHAR(255)

BEGIN

-- 预期结果.

DECLARE vResult VARCHAR(255);

IF pIndex =1THEN

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;

ENDIF;

-- 返回.

RETURN vResult;

END;

SELECT

GetTextValue(t.name, ",", MaxNum.No) AS `名称`,

COUNT(*) AS `个数`

FROM

person t,

(SELECT1 No UNIONALL

SELECT2 No UNIONALL

SELECT3 No UNIONALL

SELECT4 No UNIONALL

SELECT5 No ) MaxNum

WHERE

GetTextCount(t.name, ",") >= MaxNum.No

GROUPBY

GetTextValue(t.name, ",", MaxNum.No);

以上是 mysql多字段内容并到单字段中的操作 的全部内容, 来源链接: utcz.com/z/531825.html

回到顶部