我无法弄清楚如何在不嵌套看起来很糟糕的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
答案 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