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

複数のテーブルを参照して MS SQL Server-2008 からデータを抽出する

    前のクエリを続けると、select ステートメントの条件付き集計と、失敗したテーブルの別の左結合を使用して、新しい列を追加できると思います。

    これは機能するはずですが、クエリを改善できると確信しています:

    select 
        d.LOTQty, 
        ApprovedQty = count(d.SerialNo),
        d.DispatchDate,
        Installed = count(a.SerialNo) + count(r.NewSerialNo),
        DOA    = sum(case when datediff(day, coalesce(a.ActivationDate,r.RecordDate), f.FailedDate) <= 10 then 1 else 0 end),
        Bounce = sum(case when datediff(day, coalesce(a.ActivationDate,r.RecordDate), f.FailedDate) between 11 and 180 then 1 else 0 end)
    from 
        Despatch d 
    left join 
        Activation a 
         on d.SerialNo= a.SerialNo
        and d.DispatchDate <= a.ActivationDate 
        and d.LOTQty = a.LOTQty
    left join 
        Replaced r 
          on d.SerialNo= r.NewSerialNo
         and d.DispatchDate <= r.RecordDate
         and (a.ActivationDate is null or a.ActivationDate < d.DispatchDate)
    left join 
        Failed f 
          on (f.FailedSINo = a.SerialNo)
          or (f.FailedSINo = r.NewSerialNo)     
    where 
        d.LOTQty = 15
    group by 
        d.LOTQty, d.DispatchDate
    

    サンプル SQL フィドル テストデータ付き




    1. SQLServerで同等のORACLEConnectby句

    2. utf8(ペルシア語/アラビア語)を使用したMySQL全文検索

    3. Oracleでxmlconcat関数を使用する方法

    4. OperationalError:(1045、ユーザー'rajendra' @'localhost'のアクセスが拒否されました(パスワードを使用:NO))