2015-01-12 57 views
0

我有2個表格。一位名爲購買在子查詢中動態設置列名稱

(ID,一個月,購買,STOREID)

另一種叫purchases_targets

(ID,STOREID,目標1,TARGET2, target3,target4,target5,target6,target7,target8,target9,target10,target11,target12)

purchases_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 

注意使用上述列名的。我試過這個,結果總是返回目標列的目標+月份。我想知道是否有一種方法可以使這個工作在MySQL中。讓我知道是否需要更多信息。謝謝

+0

你需要使用動態SQL與'PREPARE',你不能在一個普通的查詢計算列名。 – Barmar

+0

我已經看過你在說什麼的例子,但是它們都不屬於子查詢。我如何在我的情況下使用PREPARE方法。 – castle

+0

這似乎是一個設計不佳的模式。爲什麼不有一個月份列的值爲1到12? – Barmar

回答

1

可以使用CASE表達拿起不同的列取決於month

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 
+0

感謝您的快速響應。這工作完美 – castle