由于类型冲突,反透视数据失败
Unpivoting data fails due to type conflict
我正在使用 SQL 服务器 2008,我正在尝试对数据进行逆透视。这是我正在使用的数据:
TIME_ELAPSE BUILDINGS_CLEARED FLOORS_CLEARED AWAITING_PERC
----------- ----------------- -------------- ------------------
15h 21m 4/4 12/12 0
我需要将行值输出到列:
TIME_ELAPSE 15h 21m
BUILDINGS_CLEARED 4/4
FLOORS_CLEARED 12/12
AWAITING_PERC 0
我尝试了什么:
SELECT NAME,VALUE
FROM #TEMP_DRILLUP_SUMMARY
UNPIVOT(VALUE FOR NAME IN (Time_Elapse,BUILDINGS_CLEARED,FLOORS_CLEARED,AWAITING_PERC))D
我收到的错误:
Msg 8167, Level 16, State 1, Line 72 The type of column "BUILDINGS_CLEARED" conflicts with the type of other columns specified in the UNPIVOT list.
将所有列设为相同的数据类型将允许您使用 UNPIVOT
语句。
示例数据
create table test2
(
TIME_ELAPSE nvarchar(10),
BUILDINGS_CLEARED nvarchar(10),
FLOORS_CLEARED nvarchar(10),
AWAITING_PERC int -- different type!
);
insert into test2 (TIME_ELAPSE, BUILDINGS_CLEARED, FLOORS_CLEARED, AWAITING_PERC) values
('15h 21m', '4/4', '12/12', '0');
问题复现
SELECT NAME, VALUE
FROM test2
UNPIVOT(VALUE FOR NAME IN (Time_Elapse, BUILDINGS_CLEARED, FLOORS_CLEARED, AWAITING_PERC)) D
这给出:
The type of column "AWAITING_PERC" conflicts with the type of other columns specified in the UNPIVOT list.
解决方案
在逆透视之前将所有列设为相同的数据类型(我使用 nvarchar(10)
因为您没有包含您的 table 定义)。
with cte as
(
select TIME_ELAPSE,
BUILDINGS_CLEARED,
FLOORS_CLEARED,
convert(nvarchar(10), AWAITING_PERC) as AWAITING_PERC -- align data types
from test2
)
SELECT NAME, VALUE
FROM cte
UNPIVOT(VALUE FOR NAME IN (TIME_ELAPSE, BUILDINGS_CLEARED, FLOORS_CLEARED, AWAITING_PERC)) D
结果
NAME VALUE
----------------- -------
TIME_ELAPSE 15h 21m
BUILDINGS_CLEARED 4/4
FLOORS_CLEARED 12/12
AWAITING_PERC 0
Fiddle 查看实际情况。
我正在使用 SQL 服务器 2008,我正在尝试对数据进行逆透视。这是我正在使用的数据:
TIME_ELAPSE BUILDINGS_CLEARED FLOORS_CLEARED AWAITING_PERC
----------- ----------------- -------------- ------------------
15h 21m 4/4 12/12 0
我需要将行值输出到列:
TIME_ELAPSE 15h 21m
BUILDINGS_CLEARED 4/4
FLOORS_CLEARED 12/12
AWAITING_PERC 0
我尝试了什么:
SELECT NAME,VALUE
FROM #TEMP_DRILLUP_SUMMARY
UNPIVOT(VALUE FOR NAME IN (Time_Elapse,BUILDINGS_CLEARED,FLOORS_CLEARED,AWAITING_PERC))D
我收到的错误:
Msg 8167, Level 16, State 1, Line 72 The type of column "BUILDINGS_CLEARED" conflicts with the type of other columns specified in the UNPIVOT list.
将所有列设为相同的数据类型将允许您使用 UNPIVOT
语句。
示例数据
create table test2
(
TIME_ELAPSE nvarchar(10),
BUILDINGS_CLEARED nvarchar(10),
FLOORS_CLEARED nvarchar(10),
AWAITING_PERC int -- different type!
);
insert into test2 (TIME_ELAPSE, BUILDINGS_CLEARED, FLOORS_CLEARED, AWAITING_PERC) values
('15h 21m', '4/4', '12/12', '0');
问题复现
SELECT NAME, VALUE
FROM test2
UNPIVOT(VALUE FOR NAME IN (Time_Elapse, BUILDINGS_CLEARED, FLOORS_CLEARED, AWAITING_PERC)) D
这给出:
The type of column "AWAITING_PERC" conflicts with the type of other columns specified in the UNPIVOT list.
解决方案
在逆透视之前将所有列设为相同的数据类型(我使用 nvarchar(10)
因为您没有包含您的 table 定义)。
with cte as
(
select TIME_ELAPSE,
BUILDINGS_CLEARED,
FLOORS_CLEARED,
convert(nvarchar(10), AWAITING_PERC) as AWAITING_PERC -- align data types
from test2
)
SELECT NAME, VALUE
FROM cte
UNPIVOT(VALUE FOR NAME IN (TIME_ELAPSE, BUILDINGS_CLEARED, FLOORS_CLEARED, AWAITING_PERC)) D
结果
NAME VALUE
----------------- -------
TIME_ELAPSE 15h 21m
BUILDINGS_CLEARED 4/4
FLOORS_CLEARED 12/12
AWAITING_PERC 0
Fiddle 查看实际情况。