标题不太清楚,但我会尽力解释一下我的情况。
我有一条sql语句,
SELECT Name,Year FROM Fruit
GROUP BY Name,Year
我得到以下结果
id | name | year |
-----------------------
1 | Apple | 2019 |
2 | Apple | 2020 |
3 | Apple | 2021 |
4 | Orange | 2017 |
5 | Orange | 2018 |
6 | Orange | 2019 |
7 | Mango | 2022 |
8 | Mango | 2023 |
9 | Mango | 2024 |
我想要这样的东西:
id | name | year |
-----------------------
1 | Apple | Y1 |
2 | Apple | Y2 |
3 | Apple | Y3 |
4 | Orange | Y1 |
5 | Orange | Y2 |
6 | Orange | Y3 |
7 | Mango | Y1 |
8 | Mango | Y2 |
9 | Mango | Y3 |
我不能使用CASE语句,因为列中的值并不总是相同。但是Group by中的行数始终为3。无论如何,我可以实现这种通用功能而无需考虑每个不同的值?
答案 0 :(得分:8)
您可以使用row_number()
:
select f.name, f.year,
concat('Y', row_number() over(partition by f.name order by f.year)) as years
from Fruit f;