2016-03-21 59 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在这种情况下,一些示例数据将有助于阐明问题。 –