2017-04-06 53 views
2

在这个小练习中,我需要首先向人们展示“Zoetermeer”, 按名称排列,同名的人需要按“bondsnr”排序(这是一个唯一的号码), 与“Zoetermeer”以外的地方的人需要仅通过“bondsnr”排序。Postgresql首先显示具体的值,按不同的标准排列

select spelersnr, naam, plaats, bondsnr 
from spelers 
where bondsnr is not null 
order by case when plaats = 'Zoetermeer' then 1 
      else 2 end, 
      bondsnr 

这是我现在的,但它不正确,我似乎无法找到解决方案。 排序从“祖特梅尔”第一部作品的人,但我不知道我怎么可以用同名的人通过他们的人数

编辑

spelersnr naam  plaats  bondsnr  
    27  Cools  Zoetermeer 2513 
    104 Moerman  Zoetermeer 7060 
    44 Bakker, de  Rijswijk 1124 
    112 Baalen, van Rotterdam 1319 
    83 Hofland   Den Haag 1608 
    2 Elfring   Den Haag 2411 
    8 Niewenburg  Rijswijk 2983 
    57 Bohemen, van Den Haag 6409 
    100 Permentier  Den Haag 6524 
    6 Permentier  Den Haag 8467 

这是应该如何排序。 我的答案显示了相同的结果,但它不正确。 我认为,因为如果他们住在同一地点,我不按名称排列

+0

我们看一些样本结果,命令你想要的方式。 (以及格式化文本。) – jarlh

回答

1

您可以不仅按单个列排序查询,还可以按records排序查询。
所以,如果我理解正确的话你的要求:

select spelersnr, naam, plaats, bondsnr 
from spelers 
where bondsnr is not null 
order by 
    case 
    when plaats = 'Zoetermeer' then 
     (1,naam,bondsnr) 
    else 
     (2,null::text,bondsnr) 
    end; 
+0

谢谢,我不知道! – DreamsInHD

1

您可以通过您的首选标准蒙上了布尔为int,然后顺序。

例子:

with a (a, b, c) as (values (1, 2, 3), (2, 1, 3), (1, 3, 2), (2, 3, 2)) 
select * from a order by (a.a = 2)::int desc, b desc; 
a | b | c 
---+---+--- 
2 | 3 | 2 
2 | 1 | 3 
1 | 3 | 2 
1 | 2 | 3 
(4 rows) 

db_example=# with a (a, b, c) as (values (1, 2, 3), (2, 1, 3), (1, 3, 2), (2, 3, 2)) 
db_example-# select * from a order by (a.a = 2)::int desc, b asc;             
    a | b | c                            
---+---+---                            
    2 | 1 | 3                            
    2 | 3 | 2                            
    1 | 2 | 3                            
    1 | 3 | 2                            
(4 rows) 

为布尔值,真正变为1,假变为0

+0

谢谢你的回应! – DreamsInHD