MYSQL#将多条无关的数据库记录合并成一条记录,并取值

来源:互联网 发布:红帽linux 10天就重启 编辑:程序博客网 时间:2024/06/07 05:48

1. 数据表【sys_info】

字段名称 字段值 预收热费单价 24.0 基本热费单价 12.0 计量热费单价 0.16 基本热费比率 60 面积热费单价 24.0

2. 将数据字典中的多条无关记录合并成一条记录

SELECT    GROUP_CONCAT(CONCAT_WS(',',`sys_info`.`name`,`sys_info`.`value`) SEPARATOR ';') AS `config`FROM `sys_info`WHERE ((`sys_info`.`name` = CONVERT('预收热费单价' USING gbk))        OR (`sys_info`.`name` = CONVERT('基本热费单价' USING gbk))        OR (`sys_info`.`name` = CONVERT('计量热费单价' USING gbk))        OR (`sys_info`.`name` = CONVERT('基本热费比率' USING gbk))        OR (`sys_info`.`name` = CONVERT('面积热费单价' USING gbk)))

执行结果:

预收热费单价,24;基本热费单价,12;计量热费单价,0.16;基本热费比率,60;面积热费单价,24

3. 以SQL语句创建视图【v_sys_info】

CREATE    /*[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]    [DEFINER = { user | CURRENT_USER }]    [SQL SECURITY { DEFINER | INVOKER }]*/    VIEW `db_cmr_xcrl`.`xxx`     AS(SELECT    GROUP_CONCAT(CONCAT_WS(',',`sys_info`.`name`,`sys_info`.`value`) SEPARATOR ';') AS `config`FROM `sys_info`WHERE ((`sys_info`.`name` = CONVERT('预收热费单价' USING gbk))        OR (`sys_info`.`name` = CONVERT('基本热费单价' USING gbk))        OR (`sys_info`.`name` = CONVERT('计量热费单价' USING gbk))        OR (`sys_info`.`name` = CONVERT('基本热费比率' USING gbk))        OR (`sys_info`.`name` = CONVERT('面积热费单价' USING gbk))))

4. 提取数据字段

SELECT CAST(SUBSTR(`g`.`config`,(LOCATE(CONVERT('预收热费单价' USING gbk),`g`.`config`) + 7),6) AS DECIMAL(5,2)) AS `price_prepaid`,    CAST(SUBSTR(`g`.`config`,(LOCATE(CONVERT('基本热费单价' USING gbk),`g`.`config`) + 7),6) AS DECIMAL(5,2)) AS `price_base`,    CAST(SUBSTR(`g`.`config`,(LOCATE(CONVERT('计量热费单价' USING gbk),`g`.`config`) + 7),6) AS DECIMAL(5,2)) AS `price_meas`,    CAST(SUBSTR(`g`.`config`,(LOCATE(CONVERT('基本热费比率' USING gbk),`g`.`config`) + 7),6) AS DECIMAL(5,2)) AS `rate_price_base`,    CAST(SUBSTR(`g`.`config`,(LOCATE(CONVERT('面积热费单价' USING gbk),`g`.`config`) + 7),6) AS DECIMAL(5,2)) AS `price_area`FROM v_sys_info g;

提取结果:

price_prepaid price_base price_meas rate_price_base price_area 24.00 12.00 0.16 60.00 24.00
阅读全文
0 0