我有一个价格栏。我需要根据另一列称为状态的价格来选择价格。如果状态为p,则首先选择该价格,否则从其他状态h选择价格。我需要确保在状态P&h都可用时,如果状态为p,则查询会选择价格。
答案 0 :(得分:1)
您可以使用Rank
函数(如果DBMS支持),该函数将根据产品对行进行分组,并根据状态对子组行进行排名。那么您可以应用where子句从每个子组中选择排名第一的行。 MS sql-server的查询如下所示。
select price
, [status]
, product
from
(select price
, [status]
, product
, RANK() over (PARTITION BY product
order by case
when [status]='p' then 1
else 0
end desc
) as rnk
from @tableA) Q
where rnk =1
样本输入
输出