zoukankan      html  css  js  c++  java
  • mysql多字段内容并到单字段中的操作

     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);
  • 相关阅读:
    CSS属性中Display与Visibility的不同
    11
    【零基础学习iOS开发】【01-前言】01-开篇
    C#计算时间差。
    C++拷贝构造函数:浅拷贝与深拷贝
    C++:string操作函数
    文件输入输出(二):文件的操作
    文件输入输出(一):重定向
    Java中的StringBuffer
    C++中setiosflags()的用法
  • 原文地址:https://www.cnblogs.com/mergy/p/12054059.html
Copyright © 2011-2022 走看看