我想以特定方式对表的值进行排序。
我有一个包含以下数据的源表(TestTable)
groupId,Name,subjectCode,PA
1,LEADER,T,67
1,Prem,P,67
1,Prem,T,89
1,Anjali,T,124
1,LEADER,P,234
1,Anjali,P,234
1,Anjali,NP,45
1,Prem,NP,23
1,LEADER,NP,123
我对新表TestSort的预期结果是
1,LEADER,NP,123
1,LEADER,P,234
1,LEADER,T,67
1,Anjali,NP,45
1,Anjali,P,234
1,Anjali,T,124
1,Prem,NP,23
1,Prem,P,67
1,Prem,T,89
我需要在asc中订购第一三列,还必须将领导者记录放在自己的顶部。
我试图做同样的事情,但是我没有得到预期的结果
插入覆盖表TestSort,然后从TestTable中依次选择* groupId asc,Name asc,subjectCode asc;
我得到的结果是
groupId,Name,subjectCode,PA
1,LEADER,T,67
1,LEADER,NP,123
1,Anjali,NP,45
1,Anjali,P,234
1,LEADER,P,234
1,Anjali,T,124
1,Prem,T,89
1,Prem,NP,23
1,Prem,P,67
我在某处做错什么了吗
TRAIL 1
insert overwrite table TestSort select * from TestTable
order by
case when name = 'LEADER' then '0' else '1' end,
groupid,
name,
subjectcode;;
select * from TestSort;
上述查询的结果是
groupId,Name,subjectCode,PA
1,Anjali,NP,45
1,LEADER,T,67
1,Prem,T,89
1,Prem,P,67
1,LEADER,NP,123
1,Prem,NP,23
1,Anjali,T,124
1,Anjali,P,234
1,LEADER,P,234
我的期望是将值插入到新表TestSort中。选择查询给了我预期的结果,但是一旦我将这些值插入TestSort中,顺序就会改变。
答案 0 :(得分:0)
我认为此查询将有效
select *, case when Name = 'LEADER' then '1' else '0' end as rank from Test order by rank desc, groupId, Name ,subjectCode asc;
答案 1 :(得分:0)
您可以将条件直接放在ORDER BY子句中:
select * from test
order by
case when name = 'LEADER' then '0' else '1' end,
groupid,
name,
subjectcode;