2013-04-30 65 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,''); 
相关问题