如何获取不同 SQL 表中每一行的 PKey 和价格?
Posted
技术标签:
【中文标题】如何获取不同 SQL 表中每一行的 PKey 和价格?【英文标题】:How can I get the PKeys and Prices for each row in a different SQL table? 【发布时间】:2016-09-30 15:58:44 【问题描述】:我无法弄清楚如何才能最好地创建此 SQL 查询的所需最终结果,而无需嵌套看起来很糟糕的 SELECT 语句。太可怕了。我觉得这可能与 PIVOT 有关,但我正在尝试找到最有效的方法。
我以简化这些表格为例。我有 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
【问题讨论】:
***.com/questions/13985470/… 这很有帮助,但我担心每次都进行 MAX 计算会增加我的执行时间。然而,玩弄它,我想我能够用 INNER JOINS 创建一些对我有用的东西。谢谢你的帮助,纳林。 如果您的产品行数增加了怎么办?你的内部连接的复杂性是什么。我对解决方案感兴趣。 现在开始写 :) 产品行不会增加。这是我正在玩弄的一个幻想体育概念。我试图通过示例使其更简单,但这可能有点误导了这个想法。 您使用的是哪个 DBMS? 【参考方案1】:感谢 Nalin 在上面 cmets 中的链接,我最终想出了一个解决方案。可能仍然有更好的解决方案,但这似乎目前有效。如果有人有更有效的想法,请告诉我。
首先,我创建了一个单独的表 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
【讨论】:
以上是关于如何获取不同 SQL 表中每一行的 PKey 和价格?的主要内容,如果未能解决你的问题,请参考以下文章