首页 > 解决方案 > MS SQL 合并同一张表的水平选择结果

问题描述

我有一个包含以下列的表:时间、投资组合 ID、MTD,其中每个投资组合 ID 的 MTD 随时间而变化。我想创建一个显示以下内容的选择:portfolioID、时间 1 的 MTD、时间 2 的 MTD 等。

在此处输入图像描述

我不知道如何达到以下结果:

在此处输入图像描述

请指教!!

标签: sqlpivot

解决方案


如果您事先知道可能的time值,则可以使用条件聚合:

select
    portfolioid,
    max(case when time = '20200803' then mtd end) mdt_for_20200803,
    max(case when time = '20200804' then mtd end) mdt_for_20200804,
    max(case when time = '20200805' then mtd end) mdt_for_20200805
from mytable
group by portfolioid

您可以select使用更多条件表达式扩展子句以处理更多可能的值。

如果您事先不知道这些值,那么纯 SQL 无法执行您想要的操作(查询始终返回相同的列集)。您需要动态 SQL,这更繁琐且高度依赖数据库。


推荐阅读