使用 CROSS APPLY 取消透视列,其中值包括 int 和 varchar

问题描述 投票:0回答:1

我正在尝试取消透视表列,但遇到从 varchar 到 int 的转换错误。我的表中的所有列都是整数,除了一列,即 varchar。错误详情如下。

将 varchar 值“View Test”转换为数据类型 int 时转换失败。

DECLARE @tableData AS TABLE (
    TD_ID INT PRIMARY KEY IDENTITY(1,1)
    , View0 INT
    , View1 INT
    , View2 INT
    , Remarks Varchar(20)
)

INSERT INTO @tableData (View0, View1, View2, Remarks)
VALUES(1, 0, 1, 'View Test')

SELECT column_Name, column_value
FROM @tableData
CROSS APPLY (
    VALUES
    ('View0',View0)
    , ('View1',View1)
    , ('View2',View2)
    , ('Remarks',Remarks)
) Q (column_Name, column_value)
sql sql-server unpivot
1个回答
0
投票

就像@Dale K所说,你可以先转换为varchar。这是示例代码:

DECLARE @tableData AS TABLE (
    TD_ID INT PRIMARY KEY IDENTITY(1,1),
    View0 INT,
    View1 INT,
    View2 INT,
    Remarks Varchar(20)
)

INSERT INTO @tableData (View0, View1, View2, Remarks)
VALUES (1, 0, 1, 'View Test')

SELECT column_Name, column_value
FROM (
    SELECT
        CAST(View0 AS VARCHAR(20)) AS View0,
        CAST(View1 AS VARCHAR(20)) AS View1,
        CAST(View2 AS VARCHAR(20)) AS View2,
        Remarks
    FROM @tableData
) src
UNPIVOT (
    column_value FOR column_Name IN (View0, View1, View2, Remarks)
) unpvt;

这是小提琴链接

© www.soinside.com 2019 - 2024. All rights reserved.