我在这样的 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
,就会出现
如果执行查询,结果如下:
结果正确。但在这里我想创建动态的字段存储和工厂。所以它取自表位置。因为数据位置是动态的。可以添加和删除
所以我有这样的字段 ID 和描述的表位置:
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/