2016-07-28 106 views
-1

我在看下面的鏈接:STUFF函數可以返回NULL值嗎?

Can I Comma Delimit Multiple Rows Into One Column?

解決方案中使用的查詢正是我需要的,也是需要返回NULL值。

SELECT t.TicketID, 
    STUFF(ISNULL((SELECT ', ' + x.Person 
      FROM @Tickets x 
      WHERE x.TicketID = t.TicketID 
     GROUP BY x.Person 
     FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') [No Preceeding Comma] 
FROM @Tickets t 
GROUP BY t.TicketID 

如果每個[TicketID]都有一個關聯的[Person],這很好用。

但是,如果Person爲NULL,對於TicketID,我需要返回TicketID並將Person顯示爲NULL或空白。我無法乾淨地移除ISNULL。

從這:

[TicketID], [Person] 
T0001  Alice 
T0001  Bob 
T0002  Catherine 
T0002  Doug 
T0003  Elaine 
T0004  NULL 

要這樣:

[TicketID], [Person] 
T0001  Alice, Bob 
T0002  Catherine, Doug 
T0003  Elaine 
T0004  NULL 
+0

你需要寫上您的查詢的頂'PIVOT' ...希望你可以探索 – techspider

+0

這是個問題嗎?或試圖討論?查找MSDN,並有條不紊地前進。另外,沒有理由不能提取,轉換並使用您的數據。簡化流程,它可能有助於找到優化的方法。 –

回答

0

這是你想要的嗎?

SELECT t.TicketID, 
     STUFF((SELECT ', ' + COALESCE(t2.Person, '<NULL>') 
       FROM @Tickets t2 
       WHERE t2.TicketID = t.TicketID 
       FOR XML PATH (''), TYPE 
      ).value('.', 'VARCHAR(max)' 
        ), 1, 2, '' 
      ) as Persons 
FROM @Tickets t 
GROUP BY t.TicketID; 

子查詢中的GROUP BY是沒有必要的,除非你有重複。

+0

我收到以下錯誤:「東西函數需要4個參數。」 – bojackh

+0

@bojackh。 。 。哎呀,我把你原來的語法留在代碼那部分的答案中。以上應該是正確的表述。 –

+0

謝謝,看起來我們需要拿出,'') – bojackh

0

我看不到您的問題...這應該工作開箱即用。也許我不明白的問題...

  • 取出NOT NULLPerson
  • 增加了一個符合TicketID =「T0004」和NULL的人
  • 從查詢中刪除ISNULL
  • 簡化你的代碼

試試這個:

DECLARE @Tickets TABLE (
    [TicketID] char(5) NOT NULL, 
    [Person] nvarchar(15) NULL 
); 

INSERT INTO @Tickets VALUES 
    ('T0001', 'Alice'), 
    ('T0001', 'Bob'), 
    ('T0002', 'Catherine'), 
    ('T0002', 'Doug'), 
    ('T0003', 'Elaine'), 
    ('T0004', NULL); 

SELECT t.TicketID, 
    STUFF(
      (
      SELECT ', ' + x.Person 
      FROM @Tickets x 
      WHERE x.TicketID = t.TicketID 
      FOR XML PATH ('') 
      ),1,2,'') AS [No Preceeding Comma] 
FROM @Tickets t 
GROUP BY t.TicketID; 

結果

TicketID No Preceeding Comma 
T0001  Alice, Bob 
T0002  Catherine, Doug 
T0003  Elaine 
T0004  NULL