将该UNPIVOT函数应用于未规范化的数据时,SQL Server 要求数据类型和长度相同。我明白为什么数据类型必须相同,但为什么 UNPIVOT 要求长度相同?
假设我有以下需要逆透视的示例数据:
CREATE TABLE People
(
PersonId int,
Firstname varchar(50),
Lastname varchar(25)
)
INSERT INTO People VALUES (1, 'Jim', 'Smith');
INSERT INTO People VALUES (2, 'Jane', 'Jones');
INSERT INTO People VALUES (3, 'Bob', 'Unicorn');
Run Code Online (Sandbox Code Playgroud)
如果我尝试 UNPIVOTFirstname和Lastname列类似于:
select PersonId, ColumnName, Value
from People
unpivot
(
Value
FOR ColumnName in (FirstName, LastName)
) unpiv;
Run Code Online (Sandbox Code Playgroud)
SQL Server 生成错误:
Msg 8167, Level 16, State 1, Line 6
“姓氏”列的类型与 UNPIVOT 列表中指定的其他列的类型冲突。
为了解决错误,我们必须使用子查询首先将Lastname列强制转换为与以下相同的长度Firstname …