重命名sql结果列的通用方法

时间:2019-03-13 13:34:21

标签: sql sql-server group-by

标题不太清楚,但我会尽力解释一下我的情况。

我有一条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。无论如何,我可以实现这种通用功能而无需考虑每个不同的值?

1 个答案:

答案 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;