2017-06-29 93 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