人们不知所措!!!
首先,这是我想要实现的目标:
从下面显示的表CUSTOMER_ORDER_DETAILS表中选择所有记录,如果存在相同CUSTOMER_NO的多个条目,则:
- 选择PAID = 1的条目
- 如果有多个PAID = 1个条目,则选择TYPE = Y
预期结果:
877,CU115,点亮,0,1,X
878,CU111,Toi,1,1,Y
879,CU117,Fla,1,1,X
我的方法是获得计数(CUSTOMER_NO)> 1在CUSTOMER_NO上使用GROUP BY,但只要我将表的其余列添加到Select语句,count列就会显示值1。 有任何指针可以解决这个问题或实现if-else类型的逻辑吗?
答案 0 :(得分:1)
您可以在order by
函数中使用row_number
条件确定这些条件的优先级。
select * from (
select t.*,
row_number() over(partition by customer_no
order by case when paid=1 and type='Y' then 1
when paid=1 then 2
else 3 end) as rnum
from customer_orders t
) t
where rnum=1
答案 1 :(得分:1)
这是优先级查询。这是一种做你想做的事情的方法:
select t.*
from (select t.*,
row_number() over (partition by customer_no
order by paid desc, type desc
) as seqnum
from t
) t
where seqnum = 1;
这假设paid
取值为0和1,而type
的值为X
和Y
。