2017-04-06 45 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