如何将行值从ProductType
转动或以某种方式转换为新列的名称,并计算按TimeId分组的每种产品类型的金额
这是我的表:
TimeId ProductType NetIncomeByProduct
---------------------------------------
2017121500 Casino 0.000000
2017121501 Casino 0.000000
2017121502 Casino 4.333282
2017121503 Casino 0.000000
2017121504 Casino 0.000000
2017121505 Casino 0.000000
2017121506 Casino -0.308172
2017121507 Casino -0.154086
2017121508 Casino 0.000000
2017121509 Casino 0.000000
2017121510 Casino 0.000000
2017121511 Casino -0.308172
2017121512 Casino 0.000000
2017121513 Casino 0.000000
2017121514 Casino 0.000000
2017121515 Casino 0.000000
2017121516 Casino 0.000000
2017121517 Casino 0.000000
2017121518 Casino 0.000000
2017121519 Casino 0.000000
2017121520 Casino 0.000000
2017121521 Casino 0.000000
2017121522 Casino 0.000000
2017121523 Casino 0.000000
2017121523 Live Dealer 0.000000
2017121522 Live Dealer 0.000000
2017121521 Live Dealer 0.000000
2017121520 Live Dealer 0.000000
2017121519 Live Dealer 0.000000
2017121518 Live Dealer 0.000000
2017121517 Live Dealer 0.000000
2017121516 Live Dealer 0.000000
2017121515 Live Dealer 0.000000
2017121514 Live Dealer 0.000000
2017121513 Live Dealer 0.000000
2017121512 Live Dealer 0.000000
2017121511 Live Dealer -0.308172
2017121510 Live Dealer 0.000000
2017121509 Live Dealer 0.000000
2017121508 Live Dealer 0.000000
2017121507 Live Dealer -0.154086
2017121506 Live Dealer -0.308172
2017121505 Live Dealer 0.000000
2017121504 Live Dealer 0.000000
2017121503 Live Dealer 0.000000
2017121502 Live Dealer 4.333282
2017121501 Live Dealer 0.000000
2017121500 Live Dealer 0.000000
所以我想要的就是举个例子
TimeId Casino Livedealer
在标题中,但我不知道我将拥有多少种产品类型以及每种产品类型都计算了NetIncomeByProduct
。
一个例子是:
TimeId Casino Livedealer
----------------------------------
2017121502 4.333282 0.0000
答案 0 :(得分:1)
所以对我的问题的正确答案是:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(t.ProductType)
FROM #TempTableNetIncomeByProduct t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT TimeId, ' + @cols + ' from
(
select TimeId
, NetIncomeByProduct
, ProductType
from #TempTableNetIncomeByProduct
) x
pivot
(
max(NetIncomeByProduct)
for ProductType in (' + @cols + ')
) p
ORDER BY TimeId'
execute(@query)
我桌上的结果是:
TimeId Casino Live Dealer
2017121500 0.000000 0.000000
2017121501 0.000000 0.000000
2017121502 4.333282 -0.154086
2017121503 0.000000 0.000000
2017121504 0.000000 0.000000
2017121505 0.000000 0.000000
2017121506 0.000000 -0.308172
2017121507 0.000000 -0.154086
2017121508 0.000000 0.000000
2017121509 0.000000 0.000000
2017121510 0.000000 0.000000
2017121511 0.000000 -0.308172
2017121512 0.000000 0.000000
2017121513 0.000000 0.000000
2017121514 0.000000 0.000000
2017121515 0.000000 0.000000
2017121516 0.000000 0.000000
2017121517 0.000000 0.000000
2017121518 0.000000 0.000000
2017121519 0.000000 0.000000
2017121520 0.000000 0.000000
2017121521 0.000000 0.000000
2017121522 0.000000 0.000000
2017121523 0.000000 0.000000