相关疑难解决方法(0)

为什么 SQL Server 在使用 UNPIVOT 时要求数据类型长度相同?

将该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)

如果我尝试 UNPIVOTFirstnameLastname列类似于:

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 …

sql-server unpivot

29
推荐指数
1
解决办法
2万
查看次数

标签 统计

sql-server ×1

unpivot ×1