0

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 クエリを使用してそれを行う方法を知りたいですか?

4

1 に答える 1

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

1 つのクエリでこれを行う唯一の方法は、2 番目と 3 番目の列を文字型にキャストすることです。クエリの反対側で何をしたいかによっては、「在庫なし」ではなく NULL を返すことを検討することをお勧めします。

于 2012-10-04T09:19:38.293 に答える