sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2008 での条件付き集計の使用

    1 行のみを返すため、最初のクエリの列リストに 2 番目のクエリを追加するだけです。これを試してください。

    SELECT Sum(CASE
                 WHEN MONTH = '2013-8-1' THEN CurrentStock
                 ELSE 0
               END)                                 AS CurrentStock,
           Isnull(Sum(CASE WHEN MONTH = '2014-2-1' THEN CPU ELSE 0 END), 0) - 
           Isnull(Sum(CASE WHEN MONTH = '2013-8-1' THEN CPU ELSE 0 END), 0) AS CPU,
           Sum(CASE WHEN Month = '2013-8-1' THEN NonCPUWIP ELSE 0 END) AS NonCPU,
           Isnull(Sum(CASE WHEN MONTH = '2014-2-1' THEN ScrapDiscarded ELSE 0 END), 0) - 
           Isnull(Sum(CASE WHEN MONTH = '2013-8-1' THEN ScrapDiscarded ELSE 0 END), 0)AS Scrap,
           Sum(CASE WHEN Month = '2013-8-1' THEN WaitingForApproval ELSE 0 END) AS WFA,
           (SELECT Count(STBSerialNUMBER)
            FROM   OutStock
            WHERE  DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
                    AND Vendor = 'abc' ) as Despatched
    FROM   Instock I
    WHERE  Vendor = 'abc'
    

    アップデート:

    各モデルの結果カウントが必要な場合は、subquery を変換します correlated subqueryに .のようなものであるべきです

      (SELECT Count(STBSerialNUMBER)
       FROM   OutStock O
       WHERE o.model = i.model  -- here is the change
       AND O.DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
       AND o.Vendor = 'abc')
    

    model はこちら Instock それぞれの count テーブル outstockで 計算されます。

    または、Left Join を使用することもできます .最初に各 model の数を計算します outstockで テーブル join 結果は Instock に返されます モデルを使用したテーブル

       ....
       From Instock I Left Join 
       (SELECT Count(STBSerialNUMBER) OutStock_count,Model
       FROM   OutStock O
       WHERE  O.DispatchDate BETWEEN '2013-8-1' AND '2014-2-1'
       AND o.Vendor = 'abc'
       Group by Model) O on o.model = i.model
    



    1. mysqld不明なオプション'--初期化'

    2. 挿入...選択...サブクエリありまたは列順なし

    3. PostgreSQLのディザスタリカバリにBarmanを使用する

    4. SQLServerでcaseステートメントを使用して複数の列を更新する