【问题标题】:Generalized way for renaming sql result column重命名sql结果列的通用方法
【发布时间】: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"。这是基于当前的假设。您的测试数据显然是有限的。还要注意,不同的水果有不同的年份。一旦聚合,没有人会知道 不同。像这样的“解决方案”很容易导致日后出现问题。

标签: sql sql-server group-by


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2016-05-18
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多