连接列,并且当列具有空值时不包括列



我有以下表格:

ApprovalOrder EntityCode ProjectCode

1 1415 NULL

2 1415 NULL

3 1415 NULL

和下面的代码:

    select 
        de.ApprovalOrder + de. EntityCode + isnull(de.ProjectCode, '') as 'RowID'
    from workflow.delegation_engine de
    where EntityCode = 1415 and DelegationCode = 'CAT1'

返回一个相加的结果。我知道这是它应该做的,但是我怎么能使它将每列的结果连接到一个结果,同时也只包括de.ProjectCode当结果不是NULL(这可以是字符或整数值)。

例如,如果我只在该表的第一行上运行查询,我希望返回的结果是'11415'。

为了明确您正在做的事情,我将首先将每个项强制转换为VARCHAR()。

CAST(de.ApprovalOrder AS VARCHAR(16)) + CAST(de.EntityCode AS VARHCAR(16)) + ISNULL(CAST(de.ProjectCode AS VARCHAR(16)), '')


如果你想要一个避免显式强制转换的方法,从一个字符串开始派生…

'' + de.ApprovalOrder + de.EntityCode + ISNULL(de.ProjectCode, '')

您正在添加两个整数值,而不是连接两个字符串。在连接这些INTEGER类型之前,您应该首先将它们CAST到VARCHAR

SELECT  CAST(de.ApprovalOrder AS VARCHAR(32)) 
        + CAST(de.EntityCode AS VARCHAR(32)) 
        + ISNULL(CAST(de.ProjectCode AS VARCHAR(32)), '') as 'RowID'
FROM    workflow.delegation_engine de
WHERE   EntityCode = 1415 
        AND DelegationCode = 'CAT1'

请注意,我假设字符串长度为32,足以进行任何INTEGER转换(10应该足够)

最新更新