2012-10-04 2 views
0

나는 또한추가 조건이있는 여러 테이블에서 선택하는 방법은 무엇입니까?

Code | Description | Owner | Location 
A202 SomeDescr1 Owner1  M-3 
B301 SomeDescr2 Owner2  M-3 
C898 SomeDescr3 Owner3  M-2 
B744 SomeDescr4 Owner4  M-3 
V123 SomeDescr5 Owner5  M-3   - code is not define in second table 

내가 "Table_Stock"이 테이블에서 다음 결과를 선택하는 올바른 쿼리를 구축 할 수

Code | Qty |  DC 
A202 10  M-3 
B301 12  M-2  !-not the same location like in 1st table for this code 
C898 90  M-2 
B744 120  M-3 

테이블이 나의 SQL Server 데이터베이스에 테이블 "Table_Codes"가 :

Code | Qty(Location=DC) | Qty on alternate DC (Location from 1st table <> DC) 
    A202    10      0 
    B301    0      12 
    C898    90      0 
    B744   120      0 
    V123 Not in stock   Not in stock 

보조 테이블을 사용하여 수행 할 수 있습니다. 하지만 단일 SELECT 쿼리를 사용하여이를 수행하는 방법을 알고 싶습니다.

+0

대체 직류가 1 이상인 경우 어떻게됩니까? 함께 추가 할 수 있습니까? – FJT

+0

예. 두 개 이상의 대체 직류가있는 경우 세 번째 필드에서 수량을 합산해야합니다. – mbigun

답변

2

이와 비슷한 것 (SQL Fiddle)?

SELECT c.Code, 
    CASE WHEN s.Code IS NULL THEN 'Not in stock' 
     ELSE CAST(SUM(CASE WHEN s.DC = c.Location THEN s.Qty ELSE 0 END) AS VARCHAR(20)) END, 
    CASE WHEN s.Code IS NULL THEN 'Not in stock' 
     ELSE CAST(SUM(CASE WHEN s.DC <> c.Location THEN s.Qty ELSE 0 END) AS VARCHAR(20)) END 
FROM Table_Codes c 
LEFT OUTER JOIN Table_Stock s ON c.Code = s.Code 
GROUP BY c.Code, s.Code 

하나의 쿼리에서이 작업을 수행하는 유일한 방법은 두 번째 및 세 번째 열을 문자 유형으로 변환하는 것입니다. 쿼리의 다른 끝에서 수행 할 작업에 따라 '재고 없음'대신 NULL을 반환하는 것이 좋습니다.

관련 문제