【问题标题】:How to concatenate all YES records into a single list?如何将所有 YES 记录连接到一个列表中?
【发布时间】:2013-04-24 13:28:46
【问题描述】:

如何将所有“是”记录合并到一个列表中?我有以下脚本,我想将其组合成一个 varchar 列表,最好使用 XML 或本机 SQL 函数。这些值为 1 或 0。我希望这些值仅在它们为 1 时出现:

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

From
health_x x

在此示例中,如果 Energetic 和 Wellnourished 为 1,其他为 0,那么我希望它显示为:

Energetic, Wellnourished

【问题讨论】:

  • TSQL 似乎是个不好的地方。你想要每行一个逗号分隔的列表吗?
  • 您要逐行完成吗?还是您希望对表中的所有行都执行此操作?
  • 我想将所有行合并为一行

标签: sql xml tsql list concatenation


【解决方案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

【讨论】:

  • 这将创建与表中的记录一样多的列表。我认为 OP 想要一个列表。
  • @Aryadev 。 . .我不是这样解释这个问题的。短语“如果 Energetic 和 Wellnourished 为 1,其他为 0,那么我希望它显示为......”让我觉得 OP 希望它逐行完成。让我们看看 OP 怎么说。
【解决方案2】:
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,'');

【讨论】:

    猜你喜欢
    • 2016-12-15
    • 2022-09-28
    • 2016-01-11
    • 1970-01-01
    • 2017-07-22
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多