Oracle10g 甲骨文:-';按ASC选择订单';但是';美国';总是第一

Oracle10g 甲骨文:-';按ASC选择订单';但是';美国';总是第一,oracle10g,Oracle10g,我必须为国家写一个下拉查询。 但美国应该永远是第一。 其余国家按字母顺序排列 我尝试了以下查询 SELECT countries_id ,countries_name FROM get_countries WHERE countries_id = 138 UNION SELECT countries_id

我必须为国家写一个下拉查询。 但美国应该永远是第一。 其余国家按字母顺序排列 我尝试了以下查询

SELECT      
           countries_id
        ,countries_name

        FROM get_countries
        WHERE 
             countries_id = 138
        UNION 

        SELECT 
                countries_id
              ,countries_name

         FROM get_countries 
        WHERE   
                  countries_id != 138
        ORDER BY 2 ASC

可能是这样的:

ORDER BY
  CASE 
     WHEN upper(country_name) = 'USA' then '0'
     ELSE lower(country_name)
  END
这里有一个完整的例子

create TABLE countries (country_name VARCHAR2(50));

INSERT INTO countries VALUES ('USA');
INSERT INTO countries VALUES ('India');
INSERT INTO countries VALUES ('Russia');
INSERT INTO countries VALUES ('China');
COMMIT;

SELECT country_name
  FROM countries
ORDER BY
  CASE 
     WHEN upper(country_name) = 'USA' then '0'
     ELSE lower(country_name)
  END
返回:

USA
China
India
Russia

可能是这样的:

ORDER BY
  CASE 
     WHEN upper(country_name) = 'USA' then '0'
     ELSE lower(country_name)
  END
这里有一个完整的例子

create TABLE countries (country_name VARCHAR2(50));

INSERT INTO countries VALUES ('USA');
INSERT INTO countries VALUES ('India');
INSERT INTO countries VALUES ('Russia');
INSERT INTO countries VALUES ('China');
COMMIT;

SELECT country_name
  FROM countries
ORDER BY
  CASE 
     WHEN upper(country_name) = 'USA' then '0'
     ELSE lower(country_name)
  END
返回:

USA
China
India
Russia

我已经有一段时间没有与oracle合作了,但您可以尝试
按国家/地区名称='USA',国家/地区名称ASC排序

校正

对不起,那没用。我把“countries\u name”错误地输入为“country\u name”,所以它现在可以工作了


您也可以使用
按解码排序(国家名称,'USA',0,1),国家名称ASC

我与oracle合作已有一段时间了,但您可以尝试
按国家名称='USA',国家名称ASC排序

校正

对不起,那没用。我把“countries\u name”错误地输入为“country\u name”,所以它现在可以工作了


您还可以使用
按解码顺序(国家名称,'USA',0,1),国家名称ASC

当上级(国家名称)='USA'然后是'0'时按大小写顺序,否则下级(国家名称)ASC ENDit抛出错误keyword@Robert-参见我上面的完整示例,我刚刚在Oracle 10g上测试了它,效果很好。非常感谢!你完全正确。现在我想知道这个CASE/WHEN/ELSE会影响查询的速度吗?@Robert-您应该在country\u name(或表中的countries\u name)上有一个索引,这样可以高效地进行排序。速度应该可以,但您可以自己测试它,并在性能因某种原因而变差时运行“解释计划”查看查询计划。按大小写排序当上限(国家/地区名称)=“USA”然后是“0”否则下限(国家/地区名称)ASC ENDit抛出错误keyword@Robert-参见我上面的完整示例,我刚刚在Oracle 10g上测试了它,效果很好。非常感谢!你完全正确。现在我想知道这个CASE/WHEN/ELSE会影响查询的速度吗?@Robert-您应该在country\u name(或表中的countries\u name)上有一个索引,这样可以高效地进行排序。速度应该可以,但如果性能因某种原因而变差,您始终可以自己测试并运行“解释计划”查看查询计划。@Jon-使用它在Oracle 10g上运行时会出现语法错误。@Jon-使用它在Oracle 10g上运行时会出现语法错误。