使用列别名作为Case语句表的其他列中的值

问题描述 投票:0回答:2

我有一个具有列FundId,BreakdownName,BreakdownType和BreakdownValue SQL表

FundId     BreakdownName   BreakdownType BreakdownValue
F00000OCVS  Cash               Long         10.69
F00000OCVS  Cash               Net          3.17

我想结果表显示fundid和Breakdownvalue为breadkdownname和breakdowntype相结合的别名

因此,例如,上表中应导致成

FundId      CashLong   CashNet
F00000OCVS  10.69       3.17

我试着用case语句作为做

select
a.FundID,
b.CashLong,
b.CashNet
from  a
 inner join ( select FundID,
    case when BreakdownName = 'Cash' and BreakdownType = 'Long' then BreakdownValue end as 'CashLong',
    case when BreakdownName = 'Cash' and BreakdownType = 'Net' then BreakdownValue end as 'CashNet'
from Morningstar.dbo.mstardatawarehouseassetallocationbreakdownvertical
where FundShareClassID = 'F00000OCVS') b
on a.FundShareClassID = b.FundShareClassID
where a.FundShareClassID = 'F00000OCVS'

但是,这是给我多行的基金。第一行的值CashLong但CashNet为空。第二行有值CashNet但CashLong为空。我想有他们在单行。

我尝试使用临时表和插入,但同样的结果做。

是否有人可以帮助我呢?

sql sql-server
2个回答
1
投票

敢肯定你可以使用条件的聚集轻松做到。事情是这样的。

select bdv.FundId
    , CashLong = max(case when bdv.BreakdownType = 'Long' then bdv.BreakdownValue end)
    , CashNet = max(case when bdv.BreakdownType = 'Net' then bdv.BreakdownValue end)
from Morningstar.dbo.mstardatawarehouseassetallocationbreakdownvertical bdv
group by bdv.FundId

0
投票

我认为你正在寻找SQL Server中的旋转功能:https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017这应该是能够“翻转”行与colums你似乎需要在这里。

您可能需要的旋转功能与子查询相结合,准备数据(例如CONCAT BreakdownName和BreakdownType在一起,然后使用该列旋转。我会张贴一些示例代码,但我没有在手大气压一个SQL Server。)

© www.soinside.com 2019 - 2024. All rights reserved.