2011-12-27 193 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