谁能告诉我如何获得下表中的行号?
我有资料:
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个月 |
将计算列添加到使用带有适当
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 ...