如何获取不同 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 和价格?的主要内容,如果未能解决你的问题,请参考以下文章

表中每一行的不同菜单项

sql server - 检查插入中每一行的存在

确定排序表中每一行的排名[重复]

如何找出 Redshift 表中每一列的大小?

如何跟踪sql中每一行的差异

如何使用 SQL 数据库计算 DataGridView 中每一行的总金额