我有以下表格:
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应该足够)