转换失败

Conversion Failed

我正在 运行 解决这个问题,试图 运行 SQL 查询。无法弄清楚到 "int" 的转换发生在哪里。有人可以给我指出正确的方向吗?

SELECT  TOP 100 PERCENT 
        a.S1 as "SegNumber", 
        a.S2 as "SegmentName", 
        a.S3 as "Description",
        a.S4 as "SegmentValue" 
FROM
( 
    SELECT      3 as "S1", 
                LTRIM(RTRIM(b.SUMMARY_ACCT)) + '_' + 'Accounts' as "S2", 
                b.ACCOUNT_DESC as "S3", 
                '^' + LTRIM(RTRIM(c.SUMMARY_ACCT)) + '_' + 'Accounts' as "S4" 
    FROM        TEST.dbo.GLCHARTSUM b 
    inner join  TEST.dbo.GLCHARTSUM c   ON  c.PARENT_OBJ_ID = b.SUMRY_ACCT_ID 
    UNION ALL 
    SELECT      3 as "S1", 
                LTRIM(RTRIM(c.SUMMARY_ACCT)) + '_' + 'Accounts' as "S2", 
                c.ACCOUNT_DESC as "S3", 
                LTRIM(RTRIM(convert(varchar(100),b.ACCOUNT))) as "S4" 
    FROM        TEST.dbo.GLCHARTDTL b 
    INNER JOIN  TEST.dbo.GLCHARTSUM c   ON  c.SUMRY_ACCT_ID = b.SUMRY_ACCT_ID 
    UNION ALL 
    SELECT      2 as "S1", 
                LTRIM(RTRIM(ACCT_UNIT)) + '_' + 'Unit' as "S2" , 
                DESCRIPTION as "S3", 
                '^' + LTRIM(RTRIM(ACCT_UNIT)) + '_Unit' as "S4" 
    FROM        TEST.dbo.GLNAMES 
    WHERE       POSTING_FLAG ='S' 
    UNION ALL 
    SELECT      2 as "S1", 
                LTRIM(RTRIM(ACCT_UNIT)) + '_' + 'Unit' as "S2", 
                DESCRIPTION as "S3", 
                LTRIM(RTRIM(ACCT_UNIT)) as "S4" 
    FROM        TEST.dbo.GLNAMES 
    WHERE       POSTING_FLAG ='P'
    UNION ALL 
    SELECT      3 as "S1", 
                MATRIX_CAT + Substring(MX_VALUE,1,5) AS "S2", 
                MX_VALUE as "S3", 
                ACCOUNT AS "S4" 
    FROM        TEST.dbo.GLACCMXVAL b 
    INNER JOIN  TEST.dbo.GLCHARTDTL c   ON  b.OBJ_ID = c.OBJ_ID 
) a 
WHERE   1 = 1 
ORDER BY a.S2

错误:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value '^ASSETS_Accounts' to data type int.

您看到此错误的原因是您上次 UNION ALLACCOUNT 是一个 INT 值,但其他 S4 列是 VARCHAR.

您应该将 ACCOUNT 列转换为 VARCHAR

...
UNION ALL 
SELECT      3 as "S1", 
            MATRIX_CAT + Substring(MX_VALUE,1,5) AS "S2", 
            MX_VALUE as "S3", 
            CONVERT(VARCHAR (100), ACCOUNT)  AS "S4" 
...