创建数据透视表时“将数据类型 varchar 转换为 bigint 时出错”

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

我对 SQL 非常陌生,正在做一个小型项目作为练习。我想创建一个数据透视表,很好地总结所有发现,但在错误消息方面遇到一些问题。

将数据类型 varchar 转换为 bigint 时出错。

我的持续时间以秒为单位,但想将其格式设置为表中的

XX hours, XX minutes, XX seconds
。让我头疼的代码块是:

SELECT  'Total hours ridden', [Member], [Casual]
FROM
    (
    SELECT 
        member_casual, 
        --ride_id,
        --DATENAME(MONTH, started_at) AS [Month],
        --rideable_type,
        --day_of_week,
        ride_length_in_sec =** CONCAT(
            SUM(CAST(ride_length_in_sec AS BIGINT))/3600,' ', 'hours',' ',
            (SUM(CAST(ride_length_in_sec AS BIGINT))%3600)/60,' ', 'minutes',' ',
            (SUM(CAST(ride_length_in_sec AS BIGINT))%3600)%60,' ', 'seconds'
        )**
    FROM
        AllCombined
    GROUP BY member_casual
    ) AS Src2
PIVOT
    (
    MAX(ride_length_in_sec) 
        FOR member_casual 
            IN ([Member], [Casual])
    ) AS Pvt2

我很确定是 CONCAT 位给我带来了麻烦,因为我已经在 SELEC 子句的不同查询中成功使用了该代码块。任何和所有的帮助将不胜感激。

到目前为止,我已尝试将列的数据类型更改为 BIGINT,希望摆脱“CAST”可能有效,但这给了我同样的错误。我尝试使用其他约定(使用+号)来连接,但什么也没有。

sql sql-server pivot pivot-table bigint
1个回答
0
投票

对于这些行,您尝试组合 INT 和字符串,您需要在连接之前将 int 转换为字符串:

CAST(SUM(CAST(ride_length_in_sec AS BIGINT))/3600 as VARCHAR(500)),' ', 'hours',' ',

上面将首先进行求和和除法,然后将其转换为 varchar,这将允许您使用 concat,因为您无法连接 int 和 string。

对要求和的每一行执行此操作。

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