mysql - 如何从 mysql 中的表中创建选择动态字段?

标签 mysql sql join left-join

我在这样的 select 语句中有查询连接:

select a.item_number, total_quantity, store, factory
from (
    select item_number, sum(quantity) as "total_quantity"
    from `item_details`
    group by item_number
) `a` 
left join (
    select item_number, sum(quantity) as 'store' 
    from `item_details` where location_code = 'STORE' 
    group by item_number
) `b` on `a`.`item_number` = `b`.`item_number` 
left join (
    select item_number, sum(quantity) as 'factory' 
    from `item_details` 
    where location_code = 'FACTORY' 
    group by item_number
) `c` on `a`.`item_number` = `c`.`item_number` 
order by `item_number` asc

从上面的查询来看,如果我使用带有字段 id、item_no、quantity 和 location_code 的表 item_details,就会出现

如果执行查询,结果如下:

enter image description here

结果正确。但在这里我想创建动态的字段存储和工厂。所以它取自表位置。因为数据位置是动态的。可以添加和删除

所以我有这样的字段 ID 和描述的表位置:

enter image description here

item_details 表中的字段location_code 是locations 表中字段id 的外键

那么如何从位置表创建选择动态字段?

注意:

我使用“query join in select statement”因为我之前没有表位置。现在我使用表位置。因为位置表中的数据是动态的。它可以添加和删除。所以我想像上面的表 1 一样用表位置显示它。似乎它需要加入表。但是我还是很迷茫

最佳答案

这没有经过测试,如果您发现错误,请创建 fiddle 。

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'ifnull(SUM(case when location_code = ''',
      location_code ,
      ''' then quantity end),0) AS `',
      location_code , '`'
    )
  ) INTO @sql
FROM
  item_details;
SET @sql = CONCAT('SELECT item_number,SUM(quantity) as "total_quantity", ', @sql, ' 
                  FROM item_details
                   GROUP BY item_number');

PREPARE stmt FROM @sql;
EXECUTE stmt;

DEALLOCATE PREPARE stmt;

关于mysql - 如何从 mysql 中的表中创建选择动态字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51832979/

相关文章:

shell - 使用 shell 脚本合并 2 个文件的列

php - 为数据库中的两个新表创建模型和关系

join - 连接表时 Hive 查询出错

mysql - 如何避免使用此基本内部联接进行全表扫描?

mysql - 如何在MySQL中提取第一个数字之前的字符串部分?

python - SQLalchemy,原始查询和参数

MySQL 根据复杂连接的计数更新列

postgresql - 在 postgresql 函数中有条件地加入输入值

php - 我怎样才能简化这个 php mysql count 代码并减少查询?

mysql - mysql 处理涉及多个分区的查询是针对每个分区并行处理还是串行处理?