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

时间:2011-12-23 01:45:10

标签: sql sql-server sql-server-2008 tsql

我有下表:

  

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'。

2 个答案:

答案 0 :(得分:4)

您正在添加两个整数值,而不是连接两个字符串。在连接它们之前,您应先CAST将这些INTEGER类型添加到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应该足够)

答案 1 :(得分:4)

为了明确你正在做什么,我会先将每个项目转换为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, '')