选择值中的SQL筛选器

时间:2013-09-29 13:20:29

标签: sql sql-server sql-server-2008

我的查询给了我这个结果

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'

1 个答案:

答案 0 :(得分:2)

ROW_NUMBER()下面的查询,它是一个生成序号的排名函数。它通过StoreID对记录进行分区,并使用OnExit语句按CASE的值对其进行排序。这只会为每StoreID显示1条记录。

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