如何根据列值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 中表中的列值从两个表中获取一个新表: