2014-07-10 1 views
1

안녕하세요, 다른 Excelworkbook에서 Excel의 가입을 시도하고 있습니다.SQL 주문 접수 및 그룹

첫 번째 테이블의 기본 키는 Part_No입니다. 이것은 기본 키가 아니므로 1 대 1 조인을 할 수 없습니다.

LIKE 및 NOT LIKE 키워드와 일치하는 결과에서 최상의 주문 상태를 선택하고 싶습니다.

WHERE 문이 완벽하게 작동하지만 FIRST 문이 ORDER BY와 일치하지 않는 것 같습니다. 결과는 무작위입니다. 때로는 'Canceled (취소됨)'명령을 받게됩니다. 동일한 파트의 주문이 재고가있는 경우에 주문합니다. 재고가있는 내부 Select 만 실행하면 두 행이 표시됩니다.

Excel vba에서 내 ADODB 연결에 Provider=Microsoft.ACE.OLEDB.12.0을 사용하고 있습니다.

무엇이 잘못 되었나요? 당신의 도움을 주셔서 감사합니다!

SELECT 
    FIRST(o.Part_No), 
    FIRST(o.Order_Desc), 
    FIRST(o.Order_Status) 
FROM 
    Parts 
LEFT JOIN 
    (
     SELECT * 
     FROM Orders 
     WHERE 
      Orders.Order_Desc Like '%keyword%' AND 
      Orders.Order_Desc Not Like '%otherkeyword%' 
     ORDER BY 
      IIF(Orders.Order_Status = 'In Stock' , 1, 
      IIF(Orders.Order_Status = 'In Transit' , 2, 
      IIF(Orders.Order_Status = 'Ordered' , 3, 
      IIF(Orders.Order_Status = 'Canceled' , 4)))) ASC 
    ) AS o 
    ON Parts.Part_No = o.Part_No 
GROUP BY Parts.Part_No; 

다음은 예입니다.

List Parts 
Part No 
1 
2 

List Orders 
Part No Order_Desc   Order_Status 
1   keyword   In Stock 
1   keyword   Canceled 
2   keyword   Ordered 
2   not keyword  In Stock 
2   keyword   Canceled 
3   keyword   Ordered 
3   keyword   In Stock 
3   keyword   In Stock 
5   not keyword  In Stock 

What i get 
1   keyword   Canceled (seems Random right or wrong) 
2   keyword   Ordered 

Desired Result 
1   keyword   In Stock 
2   keyword   Ordered 

이 예제가 도움이되기를 바랍니다. 저는 여기에 새로운 글을 올리고 있습니다. 이상한 테이블에 대한 죄송합니다

답변

0

이 시도 :

SELECT 
COUNT(o.Part_No), 
FIRST(o.Part_No), 
FIRST(o.Order_Status), 
FIRST(o.Order_No), 
FIRST(o.Order_Desc), 
     IIF(Orders.Order_Status = 'In Stock' , 1, 
     IIF(Orders.Order_Status = 'In Transit' , 2, 
     IIF(Orders.Order_Status = 'Ordered' , 3, 
     4))) AS Order_Status_OrderBy 

FROM 
Parts 
LEFT JOIN 
(
    SELECT * 
    FROM Orders 
    WHERE 
     Orders.Order_Desc Like '%keyword%' AND 
     Orders.Order_Desc Not Like '%otherkeyword%' 
    ORDER BY 
     Order_Status_OrderBy 
) AS o 
ON Parts.Part_No = o.Part_No 
GROUP BY Parts.Part_No; 
+0

이 작동하지 않았다. Select 또는 I get '집계 함수의 일부로 지정된 표현식'Order_Status_OrderBy '를 포함하지 않는 쿼리를 실행하려고했습니다.' – phlopydisk

+0

GROUP BY – user3815462

+0

에 Order_Status_OrderBy를 추가하십시오. 결과가 여러 행이되는 Order_Status_OrderBy에 하나씩 결과가 추가됩니다. 그러나 행은 올바른 순서로 작성되어 주문 순서가 작동합니다. 단지 FIRST가 그 일을하지 않는 것 같습니다. – phlopydisk