重命名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"。这是基于当前的假设。您的测试数据显然是有限的。还要注意,不同的水果有不同的年份。一旦聚合,没有人会知道 与 不同。像这样的“解决方案”很容易导致日后出现问题。 【参考方案1】:

您可以使用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 元数据编写通用的查询方法

2.redis通用keys操作

在Realm swift中重命名类的最佳方法

PS如何批量生成缩略图(方法可以通用其他重复劳动)

如何在将通用工件上传到jenkins管道中的JFrog Artifactory时重命名现有文件夹

JQuery 命名空间的最佳实践 + 通用实用程序函数