我的查询给了我这个结果
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'
答案 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