2017-06-29 23 views
1

我知道這個問題已被問了很多時間,但我一直沒能找到解決方案與我的數據結構。然而,我遇到了以下文章An Alternative (Better?) Method to UNPIVOT (SQL Spackle)Unpivot SQL OR使用行數據作爲列標題和行數據交叉應用表格作爲列數據

我有以下表的原始數據結果如下

RowType | LocalDate | UTCDate | Target1 | Target2 | Target3 
    KPIName  NULL  NULL  Feed1  Feed2  Feed3 
    Balance  NULL  NULL Product Reagent Water 
    UoM   NULL  NULL  t  t   % 
    ActiveDate 2017-01-01 2016-12-31 5.0  3.2  20 

我想達到的效果是以下

KPIName | Balance | ActiveDate | UTCDate | UoM | Value 
Feed1 Product 2017-01-01 2016-12-31 t  5.0 
Feed2 Reagent 2017-01-01 2016-12-31 t  3.2 
Feed3 Water  2017-01-01 2016-12-31 %  20 
+0

我看不出有什麼辦法組行。如果在另一個日期添加了另外4行的包,該怎麼辦? – Serg

回答

0
CREATE TABLE #Table1 
    ([RowType] varchar(10), [LocalDate] varchar(10), [UTCDate] varchar(10), [Target1] varchar(7), [Target2] varchar(7), [Target3] varchar(5)) 
; 

INSERT INTO #Table1 
    ([RowType], [LocalDate], [UTCDate], [Target1], [Target2], [Target3]) 
VALUES 
    ('KPIName', NULL, NULL, 'Feed1', 'Feed2', 'Feed3'), 
    ('Balance', NULL, NULL, 'Product', 'Reagent', 'Water'), 
    ('UoM', NULL, NULL, 't', 't', '%'), 
    ('ActiveDate', '2017-01-01', '2016-12-31', '5.0', '3.2', '20') 
; 
SELECT 
X.KPINAME,X.BALANCE,LOCALDATE,UTCDATE,X.UOM,X.VALUE 
FROM #TABLE1 
CROSS APPLY (
    VALUES ('FEED1', 'PRODUCT','T',5.0) 
    ,('FEED2', 'REAGENT','T',3.2) 
    ,('FEED3', 'WATER','%',20)) X(KPINAME, BALANCE,UOM,VALUE) 
    WHERE LOCALDATE IS NOT NULL 
+0

結果是正確的問題是您指定了交叉應用值,我的表結果爲470行。沒有指定物理值,沒有辦法實現嗎? –

+0

@WayneHollier嘗試與動態unpivot,這將幫助你.. – Chanukya