重命名sql结果列的通用方法
Posted
技术标签:
【中文标题】重命名sql结果列的通用方法【英文标题】:Generalized way for renaming sql result column 【发布时间】:2019-08-04 04:55:14 【问题描述】:标题不太清楚,但我会尝试更好地解释我的情况。
我有一条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。无论如何我可以在不考虑每个不同值的情况下实现这个通用功能?
【问题讨论】:
"...行数...始终为 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;
【讨论】:
以上是关于重命名sql结果列的通用方法的主要内容,如果未能解决你的问题,请参考以下文章
Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法