Обобщенный способ переименования столбца результатов SQL - PullRequest
0 голосов
/ 13 марта 2019

Название не совсем понятно, но я постараюсь объяснить мою ситуацию лучше.

У меня есть заявление 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, потому что значения в столбце не всегда одинаковы. Но число строк в Группе всегда равно 3. В любом случае, я могу достичь этой обобщенной функциональности, не рассматривая каждое другое значение?

1 Ответ

8 голосов
/ 13 марта 2019

Вы можете использовать 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;
...