2013-04-30 66 views
0

如何將所有「是」記錄合併到單個列表中?我想要將以下腳本合併到一個varchar列表中,理想情況下使用XML或本機SQL函數。這些數值爲1或0。我想,如果他們是1這些值只出現:如何將所有YES記錄連接成單個列表?

select 
x.Energetic, 
x.Undistressed, 
x.Wellnourished, 
x.Goodhygiene 

From 
health_x x 

在這個例子中,如果精力充沛,Wellnourished分別爲1和0人,那麼我想這個顯示爲:

Energetic, Wellnourished 
+0

TSQL似乎是一個不好的地方要做到這一點。你想每行都用逗號分隔的列表嗎? – Jodrell 2013-04-30 15:24:18

+0

你是否希望逐行完成此操作?或者你希望它爲表中的所有行完成? – 2013-04-30 15:27:07

+0

我想將所有行合併成一行 – salvationishere 2013-04-30 15:37:37

回答

1

爲此,您可以使用條件串聯。

訣竅是讓分隔符正確輸入。這個版本把,每個字符串之前,然後使用stuff()擺脫第一次出現的:

select STUFF((case when x.Energetic = 1 then ', Energetic' else '' end) + 
      (case when x.Undistressed = 1 then ', Undistressed' else '' end) + 
      (case when x.Wellnourished = 1 then ', Wellnourished' else '' end) + 
      (case when x.Goodhygiene = 1 then ', Goodhygiene' else '' end), 
      1, 2, '' 
      ) 
from health_x x 
+0

這將創建與表中的記錄一樣多的列表。我想OP想要一個單子。 – Aryadev 2013-04-30 15:22:09

+0

@Aryadev。 。 。這不是我如何解釋這個問題。 「如果精力充沛,營養不良的人是1人,而其他人是0人,那麼我希望這會顯示爲...」。讓我覺得OP希望它一行一行地完成。讓我們看看OP說的話。 – 2013-04-30 15:28:27

1
select stuff((
select 
case when x.Energetic = 1 then ', Energetic' else '' end + 
case when x.Undistressed = 1 then ', Undistressed' else '' end + 
case when x.Wellnourished = 1 then ', Wellnourished' else '' end + 
case when x.Goodhygiene = 1 then ', Goodhygiene' else '' end 

From 
health_x x 
for xml path('') 
),1,2,''); 
相關問題