0

私のクエリは私にこの結果を与えています

StoreID  BlockID DateOfEntry UPC            OnExit      
AA003    AAA416   29-09-13   6281100021049  Available   
AA003    AAA417   29-09-13   6281100021049  Low OOS-Trigger

OnExit 式に基づいて実行時に計算されます (表示されません)。同じ店舗の 2 つの値の唯一の違いは、そこに違いがあることですBlockID


私が望むのはこういうLow OOS-Triggerことです。そうでない場合は、 を表示しますAvailable

望ましい結果は次のように表示されます

StoreID  DateOfEntry UPC            OnExit      
AA003    29-09-13   6281100021049   Low OOS-Trigger

やってみDistinctましたが、それでも2行になりました。上で提供します。任意のヒント。

クエリ:

select * from dbv1.viewTable
where dateofentry='2013-09-29'
and storeid='AA003' and BlockID in ('AAA416','AAA417')
and [upc]  ='6281100021049'
4

1 に答える 1

2

以下のクエリROW_NUMBER()は、連番を生成するランキング関数です。レコードを分割し、usingステートメントStoreIDの値で並べ替えます。これにより、 ごとに 1 つのレコードのみが表示されます。OnExitCASEStoreID

SELECT  StoreID, BlockID, DateOfEntry, UPC, OnExit
FROM    
        (
            SELECT  StoreID, BlockID, DateOfEntry, UPC, OnExit,
                    ROW_NUMBER() OVER (PARTITION BY StoreID, UPC 
                    ORDER BY CASE WHEN OnExit = 'Low OOS-Trigger' THEN 1
                                ELSE 0 END) rn
            FROM    dbv1.viewTable
            -- WHERE    dateofentry = '2013-09-29'
            --      AND storeid = 'AA003' 
            --      AND BlockID in ('AAA416','AAA417')
            --      AND [upc]  = '6281100021049'
        ) a
WHERE   a.rn = 1
于 2013-09-29T13:25:40.813 に答える