How to create a row number with specific order in postgreSQL

问题描述 投票:0回答:1

谁能告诉我如何获得下表中的行号?

我有资料:

  • IDR(1 个月 - 12 个月)

  • 美元(1 个月 - 12 个月)

  • 新元(1 个月 - 12 个月)

  • 澳元(1 个月 - 12 个月)

我想要一个与“NO”列完全相同的行号,其中 IDR 先行,然后是 USD、SGD 和 AUD。

我尝试使用

order by Currency, left(month,2)
,但 IDR 没有先行。

没有 货币
1 印尼盾 1个月
2 印尼盾 3个月
3 印尼盾 4个月
4 印尼盾 5个月
5 印尼盾 6个月
6 印尼盾 12个月
7 美元 1个月
8 美元 3个月
9 美元 4个月
10 美元 5个月
11 美元 6个月
12 美元 12个月
13 新元 1个月
14 新元 3个月
15 新元 4个月
16 新元 5个月
17 新元 6个月
18 新元 12个月
sql postgresql row-number
1个回答
0
投票

将计算列添加到使用带有适当

ORDER BY
子句的窗口函数的查询:

SELECT row_number()
          OVER (ORDER BY CASE WHEN currency = 'IDR' THEN 1
                              WHEN currency = 'USD' THEN 2
                              WHEN currency = 'SGD' THEN 3
                              WHEN currency = 'AUD' THEN 4
                         END,
                         split_part(month, ' ', 1)::integer),
       ...
FROM ...
© www.soinside.com 2019 - 2024. All rights reserved.