2016-03-21 57 views
0

這是我的查詢,它工作的很好,但是如果有一行有空值的東西函數不符合我的要求。任何替代方法來做到這一點? (如:空值的電話號碼格式,464-987-987)SQL Server中的STUFF()函數用於行列中的空白空間

SELECT 
    smsFDGPatientOrder.ID, 
    STUFF((SELECT ', ' + [smsFDGPatientOrderPhoneNumbers].Number 
       FROM [smsFDGPatientOrderPhoneNumbers] 
       WHERE [smsFDGPatientOrderPhoneNumbers].FDGPatientOrder = smsFDGPatientOrder.ID 
       ORDER BY Number 
       FOR XML PATH('')), 1, 1, '') [PatientPhno] 
    FROM smsFDGPatientOrder 
    GROUP BY smsFDGPatientOrder.ID 

樣本數據不能正常工作

ID  Name Number   FDGPatientOrder Type Index 
189950 Home 630-561-3777 170638   1  NULL 
189951 Home     170638   1  NULL 
+0

'SELECT ... WHERE Number IS NOT NULL'不會選擇NULL數字......看起來像你應該做的事情。 –

+0

@TT是的正確。但是WHERE Number <> LTRIM('')就是。 –

回答

2

,而您可以使用COALESCE與默認更換NULL值,即'464-987-987'

SELECT smsFDGPatientOrder.ID, 
     STUFF((SELECT ', ' + COALESCE(s.Number, '464-987-987') 
       FROM [smsFDGPatientOrderPhoneNumbers] AS s 
       WHERE s.FDGPatientOrder = smsFDGPatientOrder.ID 
       ORDER BY Number 
       FOR XML PATH('')), 1, 1, '') [PatientPhno] 
FROM smsFDGPatientOrder 
GROUP BY smsFDGPatientOrder.ID 

編輯:

如果問題是由於smsFDGPatientOrderPhoneNumbers一個不存在匹配的記錄,你可以使用:

SELECT smsFDGPatientOrder.ID, 
     COALESCE(
      STUFF((SELECT ', ' + s.Number 
       FROM [smsFDGPatientOrderPhoneNumbers] AS s 
       WHERE s.FDGPatientOrder = smsFDGPatientOrder.ID 
       ORDER BY Number 
       FOR XML PATH('')), 1, 1, ''), 
      '464-987-987')) [PatientPhno] 
FROM smsFDGPatientOrder 
GROUP BY smsFDGPatientOrder.ID 

EDIT2:

爲了處理空間或空字符串值,您可以使用:

SELECT smsFDGPatientOrder.ID, 
     STUFF((SELECT ', ' + s.Number 
       FROM [smsFDGPatientOrderPhoneNumbers] AS s 
       WHERE s.FDGPatientOrder = smsFDGPatientOrder.ID AND 
        LTRIM(s.Number) <> '' 
       ORDER BY Number 
       FOR XML PATH('')), 1, 1, '') [PatientPhno] 
FROM smsFDGPatientOrder 
GROUP BY smsFDGPatientOrder.ID 
+0

不與COALESCE合作,爲什麼我應該把硬編碼的'464-987-987' –

+0

我認爲OP實際上並不意味着'smsFDGPatientOrderPhoneNumbers.number'中的null,而是沒有行。因此,聚結應該在「東西」之外。 – Lucero

+2

@SouravMukherjee在這種情況下,一些示例數據將有助於闡明問題。 –