我有一个具有列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为空。我想有他们在单行。
我尝试使用临时表和插入,但同样的结果做。
是否有人可以帮助我呢?
敢肯定你可以使用条件的聚集轻松做到。事情是这样的。
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
我认为你正在寻找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。)