我有两张 table 。一个名为购买,其中
(id, month, purchase, storeid)
另一个名为purchases_targets,带有
(id, storeid, target1,target2, target3, target4, target5, target6, target7, target8, target9, target10, target11, target12)
purchasing_targets 中的列名称对应于月份,即第 1 个月的目标 = target1。 正常化这对我来说不是一个选择! 我想做的事情如下。
SELECT DISTINCT
purchases.month,
purchases.purchase,
CONCAT('target',purchases.month) AS column_name,
(SELECT
column_name
FROM purchases_targets
WHERE storeid = 1) AS 'target'
FROM purchases
WHERE purchases.storeid = 1
注意上面column_name的使用。我已经尝试过了,结果总是返回目标列的目标+月份。我想知道是否有办法可以在 mysql 中完成这项工作。如果需要更多信息,请告诉我。谢谢
最佳答案
您可以使用 CASE
表达式根据月份
选取不同的列:
SELECT DISTINCT
p.month,
p.purchase,
CASE p.month
WHEN 1 THEN pt.target1
WHEN 2 THEN pt.target2
...
WHEN 12 THEN pt.target12
END AS target
FROM purchases AS p
JOIN purchases_targets AS pt ON p.storeid = pt.storeid
WHERE p.storeid = 1
关于mysql - 在子查询中动态设置列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27901290/