The*_*One 0 sql sql-server group-by
标题不太清楚,但我会尽力解释一下我的情况。
我有一条sql语句,
SELECT Name,Year FROM Fruit
GROUP BY Name,Year
Run Code Online (Sandbox Code Playgroud)
我得到以下结果
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 |
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
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 |
Run Code Online (Sandbox Code Playgroud)
我不能使用CASE语句,因为列中的值并不总是相同。但是Group by中的行数始终为3。无论如何,我可以在不考虑每个不同值的情况下实现这种通用功能?
您可以使用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;
Run Code Online (Sandbox Code Playgroud)