我有下表:
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'。
答案 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, '')