我有一个排序问题。我正在使用SQL Server 2012.我有以下数据集。空行用于显示目的。
Country CountryUser State StateUser
---------------------------------------------------------
Canada User1 null null
Canada User2 null null
USA User2 null null
USA User3 null null
Canada User1 BC User4
Canada User1 BC User5
Canada User1 ON User4
Canada User1 ON User8
Canada User2 BC User4
Canada User2 BC User5
Canada User2 ON User4
Canada User2 ON User8
total rows: 12
我想对行进行排序,使得包含状态的所有行显示在其国家/地区下方(以null作为状态的行)。例如,
Country CountryUser State StateUser
---------------------------------------------------------
Canada User1 null null
Canada User1 BC User4
Canada User1 BC User5
Canada User1 ON User4
Canada User1 ON User8
Canada User2 null null
Canada User2 BC User4
Canada User2 BC User5
Canada User2 ON User4
Canada User2 ON User8
USA User2 null null
USA User3 null null
total rows: 12
第一个排序类别是国家/地区。首先显示具有空状态的行,然后显示所有状态为非空。这些行具有第二种状态
答案 0 :(得分:1)
您可以按顺序使用案例:
select *
from #yourCountry
order by CountryUser, case when state is null then '00000000' else 'zzzzz' end
, case when stateUser is null then '00000000' else 'zzzzz' end
你的桌子:
create table #yourCountry ( Country varchar(15), CountryUser varchar(10), State varchar(5), StateUser varchar(10))
insert into #yourCountry (
Country , CountryUser , State , StateUser ) values
---------------------------------------------------------
('Canada','User1',null , null )
,('Canada','User2',null , null )
,('USA ','User2',null , null )
,('USA ','User3',null , null )
,('Canada','User1','BC','User4')
,('Canada','User1','BC','User5')
,('Canada','User1','ON','User4')
,('Canada','User1','ON','User8')
,('Canada','User2','BC','User4')
,('Canada','User2','BC','User5')
,('Canada','User2','ON','User4')
,('Canada','User2','ON','User8')
答案 1 :(得分:0)
尝试添加一个包含四列的order by
子句:
select 'Canada' as Country , 'User1' as CountryUser,null as State,null as StateUser
union all select 'Canada', 'User2', null, null
union all select 'USA' , 'User2', null, null
union all select 'USA' , 'User3', null, null
union all select 'Canada', 'User1', 'BC', 'User4'
union all select 'Canada', 'User1', 'BC', 'User5'
union all select 'Canada', 'User1', 'ON', 'User4'
union all select 'Canada', 'User1', 'ON', 'User8'
union all select 'Canada', 'User2', 'BC', 'User4'
union all select 'Canada', 'User2', 'BC', 'User5'
union all select 'Canada', 'User2', 'ON', 'User4'
union all select 'Canada', 'User2', 'ON', 'User8'
order by Country, CountryUser, State, StateUser
结果如下:
修改:
这是有效的,因为Sql Server 2012将null
值视为最低值。请参阅MSDN以供参考,以下是摘录:
ASC | DESC
指定指定列中的值应该是 按升序或降序排序。 ASC从最低级别排序 价值到最高价值。 DESC从最高值到最低值排序。 ASC是默认排序顺序。 将空值视为最低值 可能的值。
答案 2 :(得分:-1)
通过table_atr desc
从表格顺序中选择*