如何获取不同SQL表中每行的PKeys和价格?

时间:2016-09-30 15:58:44

标签: sql select pivot

我无法弄清楚如何在不嵌套看起来很糟糕的SELECT语句的情况下最好地创建此SQL查询的最终结果。太可怕了。我觉得它可能与PIVOT有关,但我正在努力寻找最有效的方法来做到这一点。

我把这些桌子作为一个例子愚弄了。我有2个表:产品和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

1 个答案:

答案 0 :(得分:0)

感谢Nalin在上述评论中的链接,我最终想出了一个解决方案。可能仍有更好的解决方案,但这似乎现在正在起作用。如果有人有更有效的想法,请告诉我。

首先,我制作了一个单独的表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