Multiple Ranks in one table

前端 未结 6 975
庸人自扰
庸人自扰 2020-11-27 22:00

I need the following, Can anyone please help me do it.

Rank   Cust_Type   Cust_Name   Revenue
1      Top         A           10000
2      Top         B               


        
6条回答
  •  悲哀的现实
    2020-11-27 22:09

    What is not exactly clear is how the items should be ranked (I assumed by Revenue) or whether you are only pulling a certain number of values (e.g. the top 3 and the bottom 3) so I assumed you wanted all values. Given those assumptions,

    Select Cust_Name, Cust_Type
        , (Select Count(*)
            From Table As T1
            Where T1.Revenue > T.Revenue ) + 1 As Rank
    From Table As T
    Where Cust_Type = 'Top'
    Union All
    Select Cust_Name, Cust_Type
        , (Select Count(*)
            From Table As T1
            Where T1.Revenue < T.Revenue ) + 1 As Rank
    From Table As T
    Where Cust_Type = 'Bottom'
    

    If you were trying to do this in a single non-union query you could do:

    Select Cust_Name, Cust_Type
        , Case Z.Cust_Type
            When 'Top' Then Z.TopRank
            Else Z.BottomRank
            End As Rank
    From    (
            Select Cust_Name, Cust_Type
                , (Select Count(*)
                    From Table As T1
                    Where T1.Revenue > T.Revenue ) + 1 As TopRank
                , (Select Count(*)
                    From Table As T1
                    Where T1.Revenue < T.Revenue ) + 1 As BottomRank
            From Table As T
            ) As Z
    

提交回复
热议问题