【发布时间】:2020-08-27 10:28:53
【问题描述】:
我有一个包含以下列的表:时间、投资组合 ID、MTD,其中每个投资组合 ID 的 MTD 随时间而变化。我想创建一个显示以下内容的选择:portfolioID、时间 1 的 MTD、时间 2 的 MTD 等。
我不知道如何实现以下结果:
请指教!!
【问题讨论】:
-
请标记您的数据库。
我有一个包含以下列的表:时间、投资组合 ID、MTD,其中每个投资组合 ID 的 MTD 随时间而变化。我想创建一个显示以下内容的选择:portfolioID、时间 1 的 MTD、时间 2 的 MTD 等。
我不知道如何实现以下结果:
请指教!!
【问题讨论】:
如果您事先知道可能的 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,这更繁琐,并且高度依赖数据库。
【讨论】:
你可以使用pivot
SELECT *
from t2
pivot(MAX(MTD) for [Time] in ([20200803] , [20200804], [20200805])) pv
这里使用 Max(MTD),因为如果您有重复/多个相同的行,则需要选择单个值(Max 或 SUM 或 AVG 等)。
【讨论】: