如何根据列值SQL Server扩展表[重复]

Posted

技术标签:

【中文标题】如何根据列值SQL Server扩展表[重复]【英文标题】:How to expand table based on column value SQL Server [duplicate] 【发布时间】:2020-08-10 09:13:17 【问题描述】:

我有一张像这样的表

+----+------+------+-------+
| ID | FY   | Code | Value |
+----+------+------+-------+
| 1  | 2021 | A    | 2     |
+----+------+------+-------+
| 1  | 2021 | B    | 5     |
+----+------+------+-------+
| 1  | 2021 | C    | 3     |
+----+------+------+-------+
| 2  | 2021 | A    | 4     |
+----+------+------+-------+
| 2  | 2021 | B    | 5     |
+----+------+------+-------+
| 2  | 2021 | C    | 6     |
+----+------+------+-------+

我想将代码栏扩展为以下格式:

+----+------+---+---+---+
| ID | FY   | A | B | C |
+----+------+---+---+---+
| 1  | 2021 | 2 | 5 | 3 |
+----+------+---+---+---+
| 2  | 2021 | 4 | 5 | 6 |
+----+------+---+---+---+

我想出了一个丑陋的方法来使用多个 Where 子查询并将它们连接在一起,但是“代码”列中有一些值使事情变得丑陋。

有没有一种优雅的方式来实现这一点? (SQL 服务器)

最好的,

【问题讨论】:

原始查询是什么样子的? Code 的值是固定的还是可以随时期而变化? (例如,在ID = 3 and FY=2021 你可以有一个code = 'D' 【参考方案1】:

使用条件聚合:

select
    id,
    fy,
    max(case when code = 'A' then value end) as A,
    max(case when code = 'B' then value end) as B,
    max(case when code = 'C' then value end) as C
from mytable
group by id, fy

【讨论】:

以上是关于如何根据列值SQL Server扩展表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据作为值列表的列值扩展熊猫数据框[重复]

根据 SQL Server 中表中的列值从两个表中获取一个新表:

怎么样删除SQL SERVER 数据库中重复的数据

根据列值返回 SQL Server 列名和对应值

如何从 SQL Server SELECT 语句返回新的 IDENTITY 列值?

SQL server 如何将列值转换为行