Sql中的转置

行转列

UNPIVOT 操作符说明

简而言之,UNPIVOT操作符就是取得一个行的数据集合,然后把每一行都转换成多个行数据。为了更好地理解,请看下图:

UNPIVOT Operation

图1

从上图中,你能发现UNPOVOT操作符,取得了两行数据,每行包含三个Price值,然后将这些转化成6行数据,其中每个产品价格都是一个不同的行。

UNPIVOT 命令制定了两个不同的列类型。第一个类型是列中不被转换的。在例子中,ID、产品名字列是这样的列类型。第二种列类型就是那些被转换的。诸如ProductCode, Wholesale 和Retail 这三列。在我上面的例子中,那些没有被转换的列将被在每套列值集合中重复,而另外的那些列将被转换成行。

UNPIVOT 语法

下面就是 UNPIVOT 的语法:

SELECT [columns not unpivoted],
  [unpivot_column],
       [value_column],
FROM
(<source query>)
AS <alias for the source data>
UNPIVOT ( [value_column] FOR [unpivot_column] IN ( <column_list> ) ) 
   AS <alias for unpivot>

Where:

    • [columns not unpivoted]: 不被转换的列的名字清单。
    • [unpivot_column]: 不转换的列的名称。
    • [value_column]: 确定一个列名称来代表不转换的列的数据。
    • <source query>: 源数据。
  •       <alias for the source data>: 为源数据转换后的表确定一个别名。
  •       <column_list>:  被转换的列的列名称。
  •      <alias for unpivot>: 为转换操作的整套生产,确定一个别名。

 

eg:

 select ID,ProductName,PurchaseType,Cost from test as test1
 unpivot( Cost for PurchaseType IN (ProductCost,Wholesale,Retail)) as trans

 

select Date,Returnss,ISIN  from test_table unpivot

(Returnss for ISIN in (
       [abcdefg]) ) as f
order by ISIN, Date

/****** Script for SelectTopNRows command from SSMS ******/

SELECT * FROM (SELECT [AsOfDate]

,[FundCode]

,TimePeriod

,[category]

,CAST (va AS FLOAT) [va]

FROM

(select * from [dbo].[OverviewReturns]) as sourcetable

unpivot(va for category in ([Gross_Annualized]

,[Net_Annualized]

,[Benchmark_1]

,[Benchmark_2]

,[Standard_Deviation]

,[Beta]

,[Correlation]

,[Sharpe]

,[Sortino]

,[Benchmark_1_Standard_Deviation]

,[Benchmark_1_Sharpe]

,[Benchmark_1_Sortino]

,[Benchmark_2_Standard_Deviation]

,[Benchmark_2_Sharpe]

,[Benchmark_2_Sortino]

,[Benchmark_1_Difference]

,[Benchmark_3_Difference])) as a ) as u

pivot(

sum([va]) for u.[TimePeriod] in ([1 Year],[5 Years],[20 Years],[Since Inception]) )as w

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值