2012-10-04 100 views
0

我有表「Table_Codes」在我的SQL Server數據庫如何從多個表中選擇附加條件?

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 

我無法建立正確的查詢從該表中選擇下一個結果:

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個備用DC,會發生什麼情況?你把它們加在一起嗎? – FJT

+0

是的。如果我有超過1個備用DC,我應該在第三個字段中總結數量 – 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而不是'沒有庫存'。