我在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
在上面的查询中,如果我使用表item_details
和ID,item_no,数量和位置代码字段
如果执行查询,则结果如下:
结果正确。但是在这里我想创建动态的现场商店和工厂。因此,它取自表位置。因为数据位置是动态的。可以添加和删除
所以我的表位置具有字段ID和类似的描述:
item_details表中的字段location_code是位置表中字段id的外键
那么如何从位置表中创建选择动态字段?
注意:
我使用“ select语句中的查询联接”,因为以前没有表位置。现在,我使用表格位置。因为位置表中的数据是动态的。可以添加和删除它。所以我想像上面的表1一样显示它并显示表位置。似乎需要加入表。但是我还是很困惑
答案 0 :(得分:1)
这未经测试,如果发现错误,请创建一个小提琴。
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;
答案 1 :(得分:0)
如果您使用存储过程,那么您的查询将变得易于动态使用。
您可以通过整数或列名来管理动态列名。
将现有查询存储在变量中,并使用If条件连接动态查询
在变量中。最后通过定义的变量执行该语句。
您可以从下面的链接获取参考以执行动态代码。 mysql dynamic query in stored procedure