0

我的查询给了我这个结果

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

OnExit 是根据公式计算的运行时间(未见)。现在,同一商店的两个值之间的唯一区别是不同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 回答