2011-12-23 96 views
3

我有以下表:連接列並在列中包含空值時不包括列?

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' 

這不幸的是返回一個附加結果。我知道這是它應該做的,但是我怎樣才能讓它將每列的結果連接成一個結果,同時當結果不是NULL時也只包括de.ProjectCode(這可以是字符或整數值) 。

例如,如果我剛剛在此表的第一行上運行查詢,我希望返回的結果爲'11415'。

回答

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, '') 
+2

隱式投射示例+1 – 2011-12-23 01:54:19

+2

@Lieven:+1爲+1;) – MatBailie 2011-12-23 01:55:01

+0

喜歡明確的鑄造示例 - 值得在將來值得注意。 – Codingo 2011-12-23 02:01:21

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應該足夠了)

+0

+1的比我快:) – MatBailie 2011-12-23 01:51:56

+0

@Dems - thx,但它似乎是微不足道的。 – 2011-12-23 01:55:52

+0

但有趣,在「我應該在牀上」種方式:) – MatBailie 2011-12-23 01:58:42