如何从具有附加条件的几个表中进行选择?

时间:2012-10-04 09:13:16

标签: sql-server-2008 select stored-procedures

我的SQL Server数据库中有“Table_Codes”表

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查询知道如何做到这一点?

1 个答案:

答案 0 :(得分: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而不是“Not in stock”。