2011-12-27 3 views
0

OrderID으로 그룹화 된 두 개의 테이블이 있습니다. 같은SQL Server 2005 INNER JOIN

뭔가 :

Orders.OrderID 
OrderDetails.OrderID 

은 내가 OrderDetails 테이블에서 열을 호출하기 위해 노력하고있어,하지만 난 Orders 테이블에 필요합니다.

나는 JOIN 또는 INNER JOIN 또는 GROUP BY를 호출 할 필요가 어디 그룹화 할 수 있습니다 Orders 테이블과 장소 OrderID의 경기가 OrderDetails.ProductCode를 표시와 함께 OrderDetails. 서로 다른 테이블에있어 이후

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) 

은 기본적으로 내가 OrderID에 의해 그룹화에 SELECT OrderDetails.ProductCode하지만 먼저 필요하고 싶습니다 : 그것은 거의 의미가 있기 때문에, 여기에 내 현재 쿼리입니다.

감사

+0

* ProductCode의 의미는 무엇입니까?하지만 먼저 OrderID *로 그룹화해야합니다. 이것은 분명하지 않습니다. 5 개의 세부 사항이있는'Order'가 있는데, 그것들은 5 개의 다른 'ProductID' 값을 참조합니다 - 그룹화 할 수 없습니다 - 이것은 별개의 분리 된 값입니다 - 당신은 항상 여러 줄을 얻을 것입니다! –

+1

세부 정보를 연결하고 (쉼표로 구분 된?) 목록으로 반환하려는 것처럼 들립니다.이 경우 [여기에서] 시작할 수 있습니다 (http://stackoverflow.com/questions/451415/simulating-group-concat). -mysql-function-in-ms-sql-server-2005 "MS SQL Server 2005의 group_concat MySQL 기능 시뮬레이션"을 참조하십시오. –

+0

완벽 하구요. 나중에 다시 시도해 보겠습니다. – henryaaron

답변

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

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가있는 각 Order에 대해 복제본을 만들었습니다. OrderDetails 테이블의 여러 행은 동일한 OrderID를 가질 수 있습니다. 제품 코드를 쉼표로 구분하고 주문을 복제하지 않으려면 어떻게해야합니까? – henryaaron

+0

예, 말했듯이 중복 행이 있습니다. 이는 OrderDetails가 동일한 OrderID를 갖는 여러 행을 가지고 있다는 사실의 당연한 결과입니다. 각 행에 od.ProductCode를 추가하여 고유하게 만들 수 있습니다. ProductCodes는 쉼표로 구분하십시오. 그것은 내적 조인을하는 것과는 전혀 다른 질문입니다. – RickNZ

+0

제품 코드를 다른 것으로 쉽게 구분할 수 있습니까? 공백, 쉼표, 마침표? – henryaaron