Unpivot SQL OR Cross-Apply table 将行数据作为列标题并将行数据作为列数据
Unpivot SQL OR Cross-Apply table with row data as column headings and row data as column data
我知道这个问题已经被问过很多次了,但我一直没能用我的数据结构找到解决方案。然而,我确实遇到了以下文章 An Alternative (Better?) Method to UNPIVOT (SQL Spackle)。
我有以下table原始数据结果如下
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
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
我知道这个问题已经被问过很多次了,但我一直没能用我的数据结构找到解决方案。然而,我确实遇到了以下文章 An Alternative (Better?) Method to UNPIVOT (SQL Spackle)。
我有以下table原始数据结果如下
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
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