当前位置: 首页 > 知识库问答 >
问题:

SQL Server-获得最便宜的供应商价格

蒋承教
2023-03-14

我有一个简单的订购数据库与表订单,Order_Item,项目,供应商和Supplier_Item。一个项目可以有多个供应商,他们都以不同的价格列出该项目。

我试图编写一个查询,查看过去7天的订单及其商品,并返回该订单商品的最便宜供应商价格。

我已经尝试过了:

   SELECT O.Order_Id, O.Site_Id, O.Order_Date,
          OI.Item_ID, OI.Quantity, OI.Supplier,
          I.Item_Name, I.Category,
          MIN(SI.Price) AS Price , SI.Supplier_ID,
          S.Supplier_Name
   FROM  [Order_Item] OI
   INNER JOIN [Order] O ON O.Order_ID = OI.Order_ID
   INNER JOIN Item I ON OI.Item_ID = I.Item_ID
   INNER JOIN Supplier_Item SI ON SI.Item_ID = I.Item_ID
   INNER JOIN Supplier S ON S.Supplier_ID = SI.Supplier_ID
   WHERE O.Order_Date > DATEADD(DAY, - 7, GETDATE())
   GROUP BY O.Order_ID, O.Site_ID, O.Order_Date, OI.Item_ID, OI.Quantity, 
            OI.Supplier, I.Item_Name, I.Category, SI.Supplier_ID, 
            S.Supplier_Name

但是结果不正确,它应该为每个订单项返回一行(大约100行),但为每个订单项和供应商价格返回一行(3000行)。

如果有人能告诉我哪里出了问题,那将是一个很大的帮助。

共有2个答案

蒯胜泫
2023-03-14

无论您有什么其他问题,您的连接看起来都不正确。尤其:

INNER JOIN Supplier_Item SI ON SI.Supplier_ID = I.Item_ID

如果让我猜的话,这应该是:

ON SI.Item_ID = I.Item_ID
欧阳骏俊
2023-03-14

尝试确定每个项目的最便宜的供应商价格,然后将其连接到订单项目

SELECT O.Order_Id,
       O.Site_Id, 
       O.Order_Date,
       OI.Item_ID, 
       OI.Quantity, 
       OI.Supplier,
       I.Item_Name, 
       I.Category,
       SI.Price,
       SI.Supplier_ID,
       SI.Supplier_Name
  FROM [Order_Item] OI
 INNER JOIN [Order] O 
    ON O.Order_ID = OI.Order_ID
 INNER JOIN Item I 
    ON OI.Item_ID = I.Item_ID
 INNER JOIN (SELECT si_a.item_id, 
                    s.supplier_id,
                    s.supplier_name,
                    si_a.price,
                    ROW_NUMBER() OVER (PARTITION BY si_a.item_id ORDER BY si_a.price) AS cheapest
               FROM supplier_item si_a
               JOIN supplier s
                 ON si_a.supplier_id = s.supplier_id
            ) si
    ON si.item_id = i.item_id 
   AND si.cheapest = 1
 WHERE O.Order_Date > DATEADD(DAY, - 7, GETDATE())
 类似资料:
  • 我有一个图G,它有一个开始节点S和一个结束节点E。这个图的特殊之处在于,它不是边有代价,而是节点有代价。我想找到S和E之间的方式(一组节点,W),使max(W)最小化。(实际上,我对W不感兴趣,只对max(W)感兴趣)等价地,如果我移除所有代价大于k的节点,那么最小的k是多少,这样S和E仍然是相连的? 我有一个想法,但想知道它是否正确和最佳。下面是我当前的伪代码: 我相信最坏的情况是O(n log

  • Oracle 的 Java SE 的 JSSE 实现是包含了一个名为 SunJSSE 的供应商,通过 JCA 来预装和预注册。这个供应商提供以下加密服务: SSL 3.0 和 TLS 1.0 安全协议的实现 最常见 SSL 和 TLS 密码套件的实现,其中包括认证、密钥协议、加密和完整性保护 一个基于 x.509 的密钥管理器的实现,用于从标准的 JCA keystore 中选择合适的认证密钥 一

  • 问题内容: 我试图获取数组中的最大值,同时仍保留项目标签。我知道我可以通过运行sort()来做到这一点,但是如果这样做,我只会丢失标签- 这对于我需要的东西毫无意义。这是数组: 有任何想法吗? 问题答案: 不要对数组进行排序以获取最大值。 获得最大值: 获取相应的密钥:

  • 问题内容: 我的数据库结构包含列:。我想检索与最低行的 每一个 。我一直在尝试弄乱and ,仍然-没有解决方案。 问题答案: 解决方案1: 解决方案2: 这个问题非常有名,因此在Mysql的手册中有专门的页面。 请检查以下内容: 行包含某列的分组最大/最小值

  • 问题内容: 我已经找到了尽可能多的文档和StackOverflow文章,但是使用Go 1.6中的新供应商功能无法导入。 这是我与Goji一起测试的示例项目。目录结构如下: 并且,项目中的唯一文件是这样的: 我的环境变量如下: 我尝试了最简单的构建命令,但是没有运气: 我也尝试用: …无济于事。我完全想念什么吗?任何建议表示赞赏。 问题答案: 我建议您阅读https://golang.org/doc