2011-12-27 160 views
0

我有两个表,按OrderID分组。SQL Server 2005 INNER JOIN

喜欢的东西:

Orders.OrderID 
OrderDetails.OrderID 

我想打电话从OrderDetails表中的列,但我需要它在Orders表。

我需要调用一个或JOININNER JOIN其中GROUP 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,因为他们是在不同的表。

感谢

+0

* ProductCode是什么意思,但首先需要通过OrderID *将它们分组......这根本不清楚。如果你有一个带有5个细节的'订单',并且这些订单指的是五个不同的'ProductID'值 - 你不能分组 - 这些都是不同的,单独的值 - 你总是会得到多行! – 2011-12-27 07:39:55

+1

听起来就像你想连接细节并将它们作为(逗号分隔?)列表返回,在这种情况下,你可以从这里开始(http://stackoverflow.com/questions/451415/simulating-group-concat -mysql-function-in-ms-sql-server-2005“模拟MS SQL Server 2005中的group_concat MySQL函数?”)。 – 2011-12-27 12:32:05

+0

完美,我会稍后再试... – henryaaron 2011-12-27 13:56:12

回答

0

尝试

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) 
+0

这就是说OrderDetails.OrderID不能被绑定。我想我应该提到,OrderDetails表中的多行可以具有相同的OrderID – henryaaron 2011-12-27 00:50:41

0

试试这个:

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的行)。

+0

这很好,但它对具有基于OrderID匹配它的多个OrderDetails的每个订单进行了重复。 OrderDetails表中的多行可以具有相同的OrderID。我怎样才能让它用逗号分隔ProductCodes而不是重复订单? – henryaaron 2011-12-27 01:19:31

+0

是的,正如我所说,它会有重复的行。这是OrderDetails具有多个具有相同OrderID的行的自然结果。您可以将od.ProductCode添加到每行以使它们唯一。用逗号分隔ProductCodes?这与完成内部连接的问题完全不同。 – RickNZ 2011-12-27 02:17:19

+0

将产品代码与任何东西分开很容易吗?空格,逗号,句号? – henryaaron 2011-12-27 02:22:23