我承認我不是很擅長PIVOT
(不是雙關語),但設法達到了我需要的一半,但我被困在第二部分。所以這是我的表格和一些資料,以及資料現在看起來如何的螢屏截圖:
CREATE TABLE #temptable ([PriceName] VARCHAR(50), [PriceName_Change] VARCHAR(50), [PriceVal] DECIMAL(28, 2), [PriceVal_Change] DECIMAL(28, 2), [Portfolio] NVARCHAR(200), [benchmark] NVARCHAR(200) , [EffectiveDate] DATE);
INSERT INTO #temptable ([PriceName], [PriceName_Change], [PriceVal], [PriceVal_Change], [Portfolio], [benchmark], [EffectiveDate])
VALUES
('OilPrice', 'OilPrice_CHANGE', 1607.00, 3.61, N'PORT45', N'SP500',N'2022-06-02T00:00:00')
,('OilPrice', 'OilPrice_CHANGE', 1607.00, 3.61, N'PORT45', N'SP500',N'2022-06-01T00:00:00')
,('OilPrice', 'OilPrice_CHANGE', 607.00, 12.61, N'PORT45', N'SP500',N'2022-05-31T00:00:00')
SoOilPrice
與列中的值相關聯,并且與列PriceVal
中的PriceName_Change
值相關聯,PriceVal_Change
這是我想要 PIVOT 的兩件事。我設法為其中一個寫了它,但我不能為他們兩個寫它。這是我所做的:
SELECT
portfolio
, EffectiveDate
, [OilPrice]
FROM
(
SELECT
SM.portfolio
, SM.PriceVal
, SM.PriceName
, SM.EffectiveDate
FROM #temptable SM
) AS tbl
PIVOT
(
SUM(PriceVal)
FOR PriceName IN ([OilPrice])
) AS pvt;
以下是我期望結果顯示的方式:
OilPrice | OilPrice_Change | Portfolio | Benchmark | EffectiveDate |
1607.00 | 3.61 | PORT45 | SP500 | 2022-06-02 |
1607.00 | 3.61 | PORT45 | SP500 | 2022-06-01 |
607.00 | 12.61 | PORT45 | SP500 | 2022-05-31 |
uj5u.com熱心網友回復:
您的預期結果是表格的最后 5 列,因此無需進行任何旋轉。
您所要做的就是過濾表,以便僅獲取帶有PriceName = 'OilPrice'
and的行PriceName_Change = 'OilPrice_CHANGE'
并將列重命名PriceVal
為OilPrice
and :PriceVal_Change
OilPrice_Change
SELECT PriceVal AS OilPrice,
PriceVal_Change AS OilPrice_Change,
Portfolio, benchmark, EffectiveDate
FROM #temptable
WHERE PriceName = 'OilPrice' AND PriceName_Change = 'OilPrice_CHANGE';
請參閱
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/495817.html
上一篇:將秘密用戶名和密碼添加到資料工廠中的SoapAPI呼叫
下一篇:SQL-顯示2列