【问题标题】:Display few specific rows always at the top始终在顶部显示几个特定行
【发布时间】:2020-04-09 14:32:54
【问题描述】:

我想始终在查询结果的顶部显示一些特定的行。

例如:城市表。列:城市 ID、城市名称

我想获取 Mumbai、Bangalore、Chennai、Hyderabad 应始终显示在顶部的查询结果。

第一种方式:

我可以先在表格中插入这些记录,以便它们始终显示在顶部。

但是,如果几个月后添加任何其他城市,我也想显示在顶部,这种方式将不起作用。

【问题讨论】:

  • 向您的表格添加按列排序?
  • 向我们展示您当前的查询,以便我们知道正确的列名。
  • 添加数据类型为 int 的新列排序。并相应地设置排序值。 Like For Mumbai Sort=> 1 Bangalore Sort=> 2 ... 并获取表数据为: select * from yourtable order by Sort

标签: sql-server


【解决方案1】:

这样做的干净方式,

Declare @t table (cityID int,cityname nvarchar(50))
Declare @DesireOrder table (id int identity,CityID int) -- instead of cityname

insert into @DesireOrder values (6),(3),(5),(1)

insert into @t values (2,'Gujrat')
insert into @t values (4,'Surat')
insert into @t values (6,'Mumbai')
insert into @t values (3,'Bangalore')
insert into @t values (5,'Chennai')
insert into @t values (1,'Hyderabad')
insert into @t values (8,'Delhi')
insert into @t values (7,'New Delhi')

select t.* from @t t
left join DesireOrder O on t.cityid=O.cityid
order by o.id,t.cityID

主要思想是@DesireOrder,其余的你可以根据你的要求实现。

【讨论】:

    【解决方案2】:

    order by 子句中使用iif

    SELECT CityId, CityName
    FROM Cities
    ORDER BY IIF(CityName IN ('Mumbai', 'Bangalore', 'Chennai', 'Hyderabad'), 0, 1), CityName
    

    您不能依赖将记录输入到表中的顺序,因为数据库表本质上是未排序的,并且没有order by 子句,结果集的顺序将是任意的。 欲了解更多信息,请阅读我的博客上的The “Natural order” misconception

    【讨论】:

    • 或者你可以试试 case: SELECT CityId, CityName FROM Cities ORDER BY case when CityName in ('Mumbai', 'Bangalore') then 1 when CityName in ('Chennai', 'Hyderabad')然后 2 else 3 end, CityName
    • @Anu 是的,没错。 iif 是简单 case 表达式的语法糖。
    【解决方案3】:

    试试这个:

    Declare @t table (cityID int,cityname nvarchar(50))
    
    insert into @t values (2,'Gujrat')
    insert into @t values (4,'Surat')
    insert into @t values (6,'Mumbai')
    insert into @t values (3,'Bangalore')
    insert into @t values (5,'Chennai')
    insert into @t values (1,'Hyderabad')
    
    
    select * from @t
    order by case when cityname in ('Mumbai','Bangalore','Chennai','Hyderabad') then 0 else 1 END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 2015-11-25
      • 2018-12-02
      • 1970-01-01
      • 2016-06-08
      • 2017-11-19
      相关资源
      最近更新 更多