2016-03-21 15 views
0

これは私のクエリですが、うまくいきますが、null値の行が存在するときにstuff関数が自分の要件を満たしていません。それを行うための代替手段はありますか? :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 

サンプルデータを(例えば、NULL値の電話番号は464-987-987、のように見えるため)そのため、あなたはデフォルトでNULL値を置き換えるためにCOALESCEを使用することができます

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 yea right。ただし、Number <> LTRIM( '')の場合はそれになります。 –

答えて

2

を動作していませんすなわち'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このケースでは、いくつかのサンプルデータが問題の解明に役立つでしょう。 –