mySQL 5.5 - 在与 UNION 链接的两个表之后将值转为列

卡伦吉

我有一个最后的问题,我无法用我的 sql 代码进行排序。基本上我想透视表并以与此不同的格式显示:http : //sqlfiddle.com/#!9/98436/1

我尝试做的是旋转 LOC_ID 和 LOC_ID_b 以获得平面文件。问题是让代码工作我按 LOC_ID 和 LOC_ID_b 分组,但不知道如何解决它。

我尝试实现的结果如下:

PN    AAA  q    AAA c   BBB q   BBB c   CCC q   CCC c
A1                      2       1       
RRR             1                               1
T1     1        1               
HHH    3                                3   
鲑鱼

您可以使用条件聚合。如果您的已知 loc_id 数量有限,您可以这样编码

Select pn,
    max(case when src = 'h'  and loc_id = 'AAA' then val else 0 end) as AAA_qty,
    max(case when src = 'r'  and loc_id = 'AAA' then val else 0 end) as AAA_count,
    max(case when src = 'h'  and loc_id = 'BBB' then val else 0 end) as BBB_qty,
    max(case when src = 'r'  and loc_id = 'BBB' then val else 0 end) as BBB_count,
    max(case when src = 'h'  and loc_id = 'CCC' then val else 0 end) as CCC_qty,
    max(case when src = 'r'  and loc_id = 'CCC' then val else 0 end) as CCC_count 
    from (select 'h' as src, pn, loc_id, sum(qty) val from history group by src,pn,loc_id 
    union
    select 'r' as src, pn, loc_id, count(*) val from rota group by src,pn,loc_id
) s 
group by pn
order by pn;

如果您不知道或不想在添加或删除 loc_ids 时更改您的代码,您需要动态 sql

set @sql = (
select concat( 
        'Select pn,',
        group_concat(
        concat('max(case when src = ' ,char(39),'h',char(39),'  and loc_id = ', char(39),loc_id,char(39), ' then val else 0 end) as ' , 
        concat(loc_id,'_qty,')
        ,
        'max(case when src = ' ,char(39),'r',char(39),'  and loc_id = ', char(39),loc_id,char(39), ' then val else 0 end) as ' , 
        concat(loc_id,'_count')
        )
        ) 

      ,' from ('
      ,
      'select ', char(39),'h',char(39),' as src, pn, loc_id, sum(qty) val from history group by src,pn,loc_id'
       ,
        ' union '
        , 
        'select ',char(39),'r',char(39),' as src, pn, loc_id, count(*) val from rota group by src,pn,loc_id
) s 
group by pn
order by pn;'
        )


from
(
select  loc_id from history
union
select loc_id from rota
) a
);

prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;

+-----+---------+-----------+---------+-----------+---------+-----------+
| pn  | AAA_qty | AAA_count | BBB_qty | BBB_count | CCC_qty | CCC_count |
+-----+---------+-----------+---------+-----------+---------+-----------+
| A1  |       0 |         0 |       2 |         1 |       0 |         0 |
| HHH |       0 |         0 |       0 |         0 |       3 |         0 |
| RRR |       0 |         0 |       0 |         0 |       0 |         1 |
| T1  |       1 |         1 |       0 |         0 |       0 |         0 |
+-----+---------+-----------+---------+-----------+---------+-----------+
4 rows in set (0.00 sec)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

订购UNION查询laravel 5

来自分类Dev

在两个不同表中的前5个字符上匹配mysql模式,然后将数据输入到单独的列中

来自分类Dev

mysql union select where table1 field3 = table2 field5

来自分类Dev

MySQL联接超过5个表

来自分类Dev

如何加入5个MySQL表?

来自分类Dev

将MYSQL表索引到Solr 5

来自分类Dev

找到5个最流行的值mysql

来自分类Dev

mysql如何缩短5个结果

来自分类Dev

MySQL将记录数限制为一列5个唯一值

来自分类Dev

我的JavaScript计算器将5 ^ 5 + 5 ^ 5视为5 ^ 5 + 5 + 5

来自分类Dev

MySql 身份与 MVC 5

来自分类Dev

如何使用5个不同的表mysql创建内部查询

来自分类Dev

MySQL-加入两个查询(UNION?)

来自分类Dev

MySQL-加入两个查询(UNION?)

来自分类Dev

MySQL 想用 UNION 对两列求和

来自分类Dev

加入两个表后如何显示5个最大值?

来自分类Dev

MySQL:选择特定行之前和之后的5行

来自分类Dev

MYSQL SELECT 最后 5 个结果,然后按日期对这 5 个结果进行排序?

来自分类Dev

使用 JOINS mysql 的两个表的 UNION 上的重复列错误

来自分类Dev

实体框架5 Codefirst与mysql

来自分类Dev

从两个表中选择Laravel 5

来自分类Dev

laravel 5在两个表之间插入关系

来自分类Dev

Rails 5 在两个表上加入 where 子句

来自分类Dev

Mysql:在创建表查询中什么是“ AUTO_INCREMENT = 5”?

来自分类Dev

通过5个左联接提高MySQL查询的速度

来自分类Dev

将md5哈希插入MySQL数据库

来自分类Dev

使用MD5密码将Wordpress与mysql连接

来自分类Dev

Laravel 5将数据从两个表传递到视图

来自分类Dev

带有列变量和盐的 MySQL MD5