Sql server 连接SQL Server函数中的列

Sql server 连接SQL Server函数中的列,sql-server,Sql Server,我有一个数据集,它包含如下列:原因1、原因2、原因3…解决方案1、解决方案2、解决方案3等等。我被要求将这些列连接成2…原因和解决方案 我想创建一个SQL Server函数,以便能够将每组列连接成一个列。每个值应以分号分隔 请注意,这些并不是我需要以这种方式连接的唯一列,因此我认为函数是最合适的解决方案。这些列是否都存储为varchar或任何其他基于文本的数据类型? 因此可以使用简单的“+”连接字符串 比如说 Select Cause_1 + ' ' + Solution_1 AS Cause_

我有一个数据集,它包含如下列:原因1、原因2、原因3…解决方案1、解决方案2、解决方案3等等。我被要求将这些列连接成2…原因和解决方案

我想创建一个SQL Server函数,以便能够将每组列连接成一个列。每个值应以分号分隔


请注意,这些并不是我需要以这种方式连接的唯一列,因此我认为函数是最合适的解决方案。

这些列是否都存储为varchar或任何其他基于文本的数据类型? 因此可以使用简单的“+”连接字符串 比如说

Select Cause_1 + ' ' + Solution_1 AS Cause_and_Solution1
FROM your_data

如果您愿意,也可以将该概念复制到函数中以供重用

谢谢您的回复。我想我没有说清楚。我会尽量解释得更清楚一点。我有几个列(不是固定数量的列)存储相同的概念(例如,原因)。我想做的是创建一个函数,可以将引用同一概念的所有列连接成一个。嗨,Hans,我可以想到一些选项,但是首先,我能得到一些更详细的信息吗?请“我有几个列(不是固定的列数)”单个表的列数必须固定。您的意思是要在多个具有不同列定义的表上使用它吗?或者在一个表中,某些列将为空?谢谢@freshAir,该表也可能是一个参数。但是,在我的例子中,所有列都是varchar。我找到了这个解决办法。然而,它仍然意味着硬代码:东西(联合(;;;+[causeTechnical-1],,)+联合(;;+[causeTechnical-2],,)+联合(;;;+[causeTechnical-3],,,)+联合(;;+[causeTechnical-4],,)+联合(;;;+[causeTechnicalOther],,,,,,,,,,,,,,,,,,,,,,)1,2,)同样,函数将接收一个表名作为参数?所有表都将有不同的列设置?你有很多使用动态SQL的经验吗?如果您不想硬编码,我相信动态将是您唯一的选择。没有更多的细节,我无法提供更多的指导,除了这可能会变得复杂。如果只有少量的表(而且它们不太可能很快改变),那么在每个表上使用静态SQL可能会更好。希望此帮助感谢@freshAir的帮助。我来看看动态SQL。在本例中,所有列都是varchar,并且都位于一个特定的表中。因此,您想要一个包含可变列数的函数吗?一个函数不能有可变数量的参数,因此这是错误的。有没有理由不使用字符串连接来连接它们?我可以想到各种各样的方法来使用信息模式和动态sql,但是没有一种方法效率不高。谢谢Tom。嗯,我试过了,但在我的数据集中发现了几组类似的列。所以,我想,如果可能的话,用这样的方式思考可能会更简单。谢谢顺便说一下,我在SQL 2017中找到了CONCAT_wws()。这听起来很容易实现。但是,我仍然在SQL 2016。因此,我发现错误“CONCAT_WS”不是可识别的内置函数名。这些列的数据类型、原因和解决方案是什么?他们都是瓦查尔吗?是的,他们都是瓦查尔@Dimith