sql:根据其他列中的值选择值

时间:2018-07-10 18:31:08

标签: sql

我有一个价格栏。我需要根据另一列称为状态的价格来选择价格。如果状态为p,则首先选择该价格,否则从其他状态h选择价格。我需要确保在状态P&h都可用时,如果状态为p,则查询会选择价格。

1 个答案:

答案 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 

样本输入

enter image description here

输出

enter image description here