2016-09-30 21 views
0

我無法弄清楚如何才能最好地創建這個SQL查詢所需的最終結果,而不會嵌套SELECT語句,這似乎太糟糕了。太可怕了。我覺得這可能與PIVOT有關,但我試圖找到最有效的方法來做到這一點。如何獲取不同SQL表中每行的PKeys和價格?

作爲一個例子,我已經淡化了這些表格。我有2個表格:PRODUCTS和PRODUCT_PRICING。 PRODUCT_PRICING表格每週會有多個價格發生變化的產品實例。

PRODUCTS 
PKey | ProductName 
------------------------ 
10   Hammer 
24   Screw Driver 
31   Nail 
48   Wrench 

PRODUCT_PRICING 
PKey | ProductPKey | ProductPrice | WeekNumber 
---------------------------------------------------------- 
1   10    10.00    20 
2   10    9.50    21 
3   24    6.00    21 
4   31    0.01    15 
5   31    0.02    21 
6   48    7.50    21 

我試圖做的是通過在一個星期數(21),並得到所有的結果在這樣的結構:

WeekNumber | HammerPKey | HammerPrice | ScrewDriverPKey | ScrewDriverPrice | NailPKey | NailPrice | WrenchPKey | WrenchPrice 
21   10   9.50   24    6.00    31   0.02  48   7.50 
+0

http://stackoverflow.com/questions/13985470/mysql-how-to-display-row-value-as-column-name-using-concat-and-group-concat –

+0

這很有幫助,但我擔心每次執行MAX計算都會增加執行時間。然而,玩弄它,我認爲我能夠用INNER JOINS創建一些適用於我的東西。感謝您的幫助,娜琳。 – Rob

+0

如果您的產品行數增加會怎樣?內部連接的複雜程度如何?我對這個解決方案感興趣。 –

回答

0

由於納林在上述評論的鏈接,我最終提出了一個解決方案。可能還有更好的解決方案,但現在看起來似乎有效。如果有人有更高效的想法,請告訴我。

首先我做了一個單獨的表PRODUCT_SELECTION,它有HammerPKey,ScrewDriverPKey,NailPKey,WrenchPKey和WeekNumber列。對我而言,產品數量不會改變。然後我跑了這一點:

SELECT 
    HammerPKey, 
    Hammer.Price, 
    ScrewDriverPKey, 
    ScrewDriver.Price, 
    NailPKey, 
    Nail.Price, 
    WrenchPKey, 
    Wrench.Price, 
FROM PRODUCT_SELECTION 
INNER JOIN PRODUCT_PRICING AS Hammer 
    ON Hammer.ProductPKey = PRODUCT_SELECTION.HammerPKey 
    AND Hammer.WeekNumber = PRODUCT_SELECTION.WeekNumber 
INNER JOIN PRODUCT_PRICING AS ScrewDriver 
    ON ScrewDriver.ProductPKey = PRODUCT_SELECTION.ScrewDriverPKey 
    AND ScrewDriver.WeekNumber = PRODUCT_SELECTION.WeekNumber 
INNER JOIN PRODUCT_PRICING AS Nail 
    ON Nail.ProductPKey = PRODUCT_SELECTION.NailPKey 
    AND Nail.WeekNumber = PRODUCT_SELECTION.WeekNumber 
INNER JOIN PRODUCT_PRICING AS Wrench 
    ON Wrench.ProductPKey = PRODUCT_SELECTION.WrenchPKey 
    AND Wrench.WeekNumber = PRODUCT_SELECTION.WeekNumber 
WHERE PRODUCT_SELECTION.WeekNumber = 21 
相關問題