【问题标题】:SQL Server 2005 INNER JOINSQL Server 2005 内部联接
【发布时间】:2012-01-28 05:45:25
【问题描述】:

我有两个按OrderID 分组的表。

类似:

Orders.OrderID
OrderDetails.OrderID

我正在尝试调用 OrderDetails 表中的列,但我需要在 Orders 表中使用它。

我需要调用JOININNER JOINGROUP BY,我可以将OrderDetailsOrders 表分组,OrderID 的匹配显示OrderDetails.ProductCode。由于这几乎没有意义,这是我当前的查询:

SELECT 
    Orders.OrderID, Orders.OrderDate, Orders.ShipLastName, Orders.ShipFirstName, 
    Orders.ShipCity, Orders.ShipState, Orders.Order_Comments, Orders.OrderNotes, 
    Orders.ShipPhoneNumber, Orders.ShipDate
FROM Orders 
WHERE Orders.OrderStatus = 'Shipped'  
AND Orders.ShipDate > DATEADD(Day, Datediff(Day,0, GetDate() -20), 0)
AND Orders.ShipDate < DATEADD(Day, Datediff(Day,0, GetDate() -13), 0)

基本上我想SELECT OrderDetails.ProductCode 但首先需要将它们按OrderID 分组,因为它们位于不同的表上。

谢谢

【问题讨论】:

  • ProductCode 是什么意思,但首先需要按 OrderID 对它们进行分组 .....这一点都不清楚。如果您有一个包含 5 个详细信息的 Order,并且它们指的是五个不同的 ProductID 值 - 您不能分组 - 这些是不同的、单独的值 - 您总是会得到多行!
  • 听起来你想连接细节并将它们作为(逗号分隔?)列表返回,在这种情况下你可以开始from here
  • 完美,我稍后再试试……

标签: sql sql-server sql-server-2005 join inner-join


【解决方案1】:

试试

SELECT Orders.OrderID, Orders.OrderDate, Orders.ShipLastName, Orders.ShipFirstName, Orders.ShipCity, Orders.ShipState, Orders.Order_Comments, Orders.OrderNotes, Orders.ShipPhoneNumber, Orders.ShipDate, OrderDetails.[COLUMNNAME_HERE]
FROM Orders, OrderDetails
WHERE Orders.OrderID = OrderDetails.OrderID AND 
Orders.OrderStatus = 'Shipped' AND
AND Orders.ShipDate > DATEADD(Day, Datediff(Day,0, GetDate() -20), 0)
AND Orders.ShipDate < DATEADD(Day, Datediff(Day,0, GetDate() -13), 0)

【讨论】:

  • 表示无法绑定OrderDetails.OrderID。我想我应该提一下,OrderDetails 表中的多行可以有相同的 OrderID
【解决方案2】:

试试这个:

SELECT o.OrderID, o.OrderDate, o.ShipLastName, o.ShipFirstName,
       o.ShipCity, o.ShipState, o.Order_Comments, o.OrderNotes,
       o.ShipPhoneNumber, o.ShipDate
FROM OrderDetails od
INNER JOIN Orders o ON o.OrderID = od.OrderID
WHERE o.OrderStatus = 'Shipped'  
AND o.ShipDate > DATEADD(Day, Datediff(Day, 0, GetDate() -20), 0)
AND o.ShipDate < DATEADD(Day, Datediff(Day, 0, GetDate() -13), 0)

然后,您可以将 OrderDetails 表中所需的任何详细信息添加到列列表中(否则您将在 OrderDetails 中看到每个唯一 OrderID 的相同行)。

【讨论】:

  • 这很好用,但是它为每个具有多个基于 OrderID 匹配的 OrderDetails 的订单制作了一个副本。 OrderDetails 表中的多行可以具有相同的 OrderID。我怎样才能让它用逗号分隔 ProductCodes 而不是重复订单?
  • 是的,正如我所说,它会有重复的行。这是 OrderDetails 具有多个具有相同 OrderID 的行这一事实的自然结果。您可以将 od.ProductCode 添加到每一行以使其唯一。用逗号分隔产品代码?这与如何进行内部连接完全不同。
  • 产品代码与任何东西分开容易吗?空格、逗号、句号?
【解决方案3】:

感谢 Andriy M,我找到了 this,它成功了!

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2017-01-01
    • 2014-07-10
    • 2011-03-14
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多