2016-10-11 2 views
0

많은에 내가SQL 서버 2014 하나의 문제

한 번 지불이 개 테이블, 주문 및 AWB를 가지고 주문 송장하게하고 AWB 내가 각 깃발 'HOLD'를 가지고 주문에서 출하

생성됩니다 기록

주문은 종종 하나 하나 개의 항목 따라서 한 기록이지만, 때로는 더 행 주문이있는

내가 원하는 그런 일은, 적어도 하나 개의 순서는 전체 선적 을 차단 개최 때 만 에서 볼 수 있듯이 이 SQLFiddle, 내 solution AWB를 중지하려면 모든 3 개의 주문 라인이 보류 중입니다.

내가 원하는 것을 어떻게 얻을 수 있습니까?

업데이트 .. sqlFiddle이 제대로 작동하지 않습니다 여기에 예

CREATE TABLE Orders (
    OrderID varchar(10) NULL, 
    UserID nvarchar(20) NULL, 
    ItemID nvarchar(20) NULL, 
    Quantity int NULL, 
    Hold bit NULL 
) 

CREATE TABLE AWB (
    ShipmentID varchar(10) NULL, 
    OrderID varchar(10) NULL, 
    UserID nvarchar(20) NULL, 
    Content nvarchar(200) NULL, 
    TrackingID nvarchar(20) NULL 
) 



Insert into Orders (OrderID,UserID,ItemID,Quantity,Hold) 
    VALUES ('25', 'John', 'Item2',1,0) 
Insert into Orders (OrderID,UserID,ItemID,Quantity,Hold) 
    VALUES ('26', 'Frank', 'Item3',1,0) 
Insert into Orders (OrderID,UserID,ItemID,Quantity,Hold) 
    VALUES ('25', 'John', 'Item3',2,0) 
Insert into Orders (OrderID,UserID,ItemID,Quantity,Hold) 
    VALUES ('25', 'John', 'Item4',1,1) 
Insert into Orders (OrderID,UserID,ItemID,Quantity,Hold) 
    VALUES ('27', 'Bill', 'Item1',2,0) 
Insert into Orders (OrderID,UserID,ItemID,Quantity,Hold) 
    VALUES ('28', 'Anna', 'Item3',4,0) 


Insert into AWB (ShipmentID,ORderID,UserID,Content,TrackingID) 
    VALUES ('A414', '26', 'Frank', '1xItem3', 'DHL232455') 
Insert into AWB (ShipmentID,ORderID,UserID,Content,TrackingID) 
    VALUES ('A415', '25', 'John', '4xItem1,1xItem2,2xItem3,1xItem4', 'DHL232465') 
Insert into AWB (ShipmentID,ORderID,UserID,Content,TrackingID) 
    VALUES ('A416', '26', 'Bill', '2xItem1', 'DHL232467') 
Insert into AWB (ShipmentID,ORderID,UserID,Content,TrackingID) 
    VALUES ('A417', '26', 'Anna', '4xItem3', 'DHL232489') 




SELECT DISTINCT 
    awb.ShipmentID, 
    awb.OrderID, 
    awb.UserID, 
    awb.Content, 
    awb.TrackingID 
FROM 
    AWB 
JOIN 
    Orders o ON o.OrderID=awb.OrderID 
WHERE 
    o.Hold=0 

를 나는이 상황을 선택 주문 25

를 반환하지 않습니다 것을 기대

감사합니다! 조

+0

예상 결과도 추가 할 수 있습니까? –

+0

물론 추가되었습니다. 하지만 단순히 주문 25를 돌려 보내지 마십시오! – Joe

답변

1

사용이 조항 : 속도 향상을 위해

where o.OrderID not in (select OrderID from Orders where Hold=1) 

당신이 주문의 조인 드롭하지 존재 추가 awb.OrderID

where awb.OrderID not in (select OrderID from Orders where Hold=1) 
1

를 직접 필터링 할 수 있습니다 where 절 -

SELECT DISTINCT 
    awb.ShipmentID, 
    awb.OrderID, 
    awb.UserID, 
    awb.Content, 
    awb.TrackingID 
FROM 
    AWB 
JOIN 
    Orders o ON o.OrderID=awb.OrderID 
WHERE 
    o.Hold=0 
    and not exists (select 1 from Orders od where od.OrderID = o.OrderID and od.Hold = 0 group by od.OrderID having count(*) > 1) 
+0

초보자 질문에 대해 유감 스럽지만 '존재하지 않습니다'는 몇 가지 추가 기능을 추가합니까? Bernd Ott가 제안한 솔루션이 훨씬 간단하기 때문에 시간 내 주셔서 감사합니다. – Joe