【问题标题】:Manipulating Data in Joins操作联接中的数据
【发布时间】:2013-04-26 12:28:39
【问题描述】:

图表:

加入查询:

SELECT DISTINCT c.CustomerID, c.FirstName , sh.DueDate, p.ProductID,p.ListPrice
FROM SalesLT.Customer c 
  INNER JOIN SalesLT.SalesOrderHeader sh
    ON c.CustomerID = sh.CustomerID 
  INNER JOIN SalesLT.SalesOrderDetail sd
    ON sh.SalesOrderID = sd.SalesOrderID
  INNER JOIN SalesLT.Product p
    ON sd.ProductID = p.ProductID
Order BY ListPrice Desc

输出:

期望的结果:

对于所需的输出:

  1. 现有查询可以添加什么?
  2. 执行此查询的优化方式是什么?
  3. 子查询和连接的时间和空间复杂度是多少?

【问题讨论】:

  • 你是否使用过 Over Clause 和 Aggregate 函数?如果没有,您可能想查看它here
  • 您能解释一下为什么期望结果表中的产品 ID 具有这些值吗? IE。为什么是 794、795、793 和 956?
  • @Serg 感谢您的指出。现已编辑!!
  • 始终发布 SQL DDL (CREATE TABLE) 语句和示例 INSERT 语句。 看起来 Christopher想要 5 种产品,每种产品的标价相同。在输出中只显示 一个 背后的逻辑是什么?此外,根据经验,围绕主键构建麻烦的查询,直到您获得正确的数据。即包括SalesOrderID等
  • @Mike Aye Sr 感谢您的建议。我只是想弄清楚我的概念。它的示例 db Advenure Salesdb by msdn。

标签: sql sql-server-2008 join sql-server-2008-r2 subquery


【解决方案1】:

我想你想要:

    SELECT c.CustomerID
    , c.FirstName 
    , sh.DueDate
    , MAX(p.ProductID) ProductID
    ,p.ListPrice
    FROM SalesLT.Customer c 
      INNER JOIN SalesLT.SalesOrderHeader sh
        ON c.CustomerID = sh.CustomerID 
      INNER JOIN SalesLT.SalesOrderDetail sd
        ON sh.SalesOrderID = sd.SalesOrderID
      INNER JOIN SalesLT.Product p
        ON sd.ProductID = p.ProductID
    GROUP BY
    , c.FirstName 
    , sh.DueDate
    , p.ListPrice

Order BY ListPrice Desc

并不是说它作为查询有多大意义,但我猜你想知道这种方法?可能您现在已经有了一个很好的答案,但是如果您打勾适当的回答,它会鼓励我们花时间回答,谢谢

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 1970-01-01
    • 2010-10-30
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2011-06-19
    • 2020-07-02
    相关资源
    最近更新 更多