在TOP上以特定值排序

时间:2013-12-26 12:59:53

标签: sql oracle plsql

我要求按字母顺序排列国家/地区列表,但要在TOP上使用特定国家/地区。 在该国家之后,应按字母顺序排序。 实施例

India
Afghanistan
Albania
Algeria
American Samoa
Andorra
Angola
Anguilla
Antigua and Barbuda
Argentina
Armenia
Aruba 

........... 我尝试了这里提供的答案Sorting certain values to the top 但它没有用 我正在使用PL / SQl开发工具。 Thanx in Advance

5 个答案:

答案 0 :(得分:12)

这样的事情应该有效:

MySQL VERSION

ORDER BY (country = 'India') DESC, country ASC

SQLFIDDLE DEMO

- 或 -

ORDER BY 
    CASE 
       WHEN country = 'India' THEN 1
       ELSE 2
    END,
    country ASC

SQLFIDDLE DEMO

ORACLE VERSION

ORDER BY 
    CASE 
       WHEN country = 'India' THEN 1 
       ELSE 2
    END

或者您可以在顶部拥有多个特定值:

ORDER BY 
    CASE 
       WHEN country = 'India' THEN 1
       WHEN country = 'United Kingdom' THEN 2
       ELSE 3
    END

答案 1 :(得分:1)

如果NULL列中没有country值,则您可以使用该值:

ORDER BY NULLIF(country, 'India') ASC NULLS FIRST

答案 2 :(得分:0)

Thanx全部回复。 这样我就试过了。

 SELECT *
        FROM (SELECT L.LOOK_UP_CODE, TO_CHAR(L.CITY) LOOK_UP_DESC
                FROM GHCM_IN_CITIES_MAPPING_DTLS L, GHCM_LOOK_UP_TBL A
               WHERE L.ENABLED_FLAG = 'Y'
                 AND L.STATE = IN_STATE
                 AND A.LOOK_UP_TYPE = 'LOCATION_VALUE'
              UNION
              SELECT A.LOOK_UP_CODE LOOK_UP_CODE,
                     A.LOOK_UP_DESC LOOK_UP_DESC
                FROM GHCM_LOOK_UP_TBL A
               WHERE A.LOOK_UP_TYPE = 'LOCATION_VALUE')
       ORDER BY (CASE
                  WHEN LOOK_UP_DESC = 'Others' THEN
                   'ZZZ'
                  ELSE
                   LOOK_UP_DESC
                END);

它完美运作。

答案 3 :(得分:0)

使用FIELD函数可以另一种简单的方法来获得所需的结果。

如果值匹配,通常FIELD函数将返回TRUE。

例如,如果表结构是这样的,

enter image description here

ORDER BY FIELD(first_name, 'PENELOPE')将按FIELD的顺序返回值的位置。由于PENELOPE位于第一个位置,它将返回1,当FIELD内不存在该值时,它将返回0,

ORDER BY FIELD(first_name,' PENELOPE')DESC

如果您想在顶部对多个项目进行排序,则可以使用

ORDER BY FIELD(first_name,' PENELOPE',' BETTE')DESC

在上面的示例中,带有first_name的{​​{1}}将首先出现,PENELOPE带有first_name,然后是其他值。

答案 4 :(得分:0)

你可以试试这个。

SELECT * 
FROM `country` 
ORDER BY CASE WHEN countyName = 'india' THEN 1 ELSE 2 END, countyName ASC