T-SQL:如何将逗号连接到除最终记录之外的所有文本字段

Posted

技术标签:

【中文标题】T-SQL:如何将逗号连接到除最终记录之外的所有文本字段【英文标题】:T-SQL: How to concatenate a comma to a text field for all but final record 【发布时间】:2016-05-21 13:25:49 【问题描述】:

我想知道如何编写查询,该查询可以将逗号附加到文本字段中,用于除最终记录之外的所有选定记录。

我想创建一个通用函数,它可以包装一个查询来为 C# 和 TypeScript 创建枚举赋值语句。这是一个通用查询:

SELECT ATextField, AnIntegerField
FROM table1 join table2 .... join tableN

包装函数应返回按文本字段排序的不同值,格式如下:

TextValue1 = 15,
TextValue2 = 3,
...
TextValueN = 128 --No comma here on the final record

【问题讨论】:

能否添加ATextFieldAnIntegerField的样本数据 您可能还有其他原因,但我能想到的唯一原因是最终将其放入一个以逗号分隔的字段中。如果这就是你最终要做的,请看here。 你为什么要在 TSQL 中这样做?如果你是在 C# 中阅读这篇文章,那么就在那里阅读(这是一个简单的任务)。 【参考方案1】:

由于没有提供任何示例数据,所以没有尝试,但可能您可以使用 LEAD 函数检查是否有以下行,如果没有,则设置“逗号”:

https://msdn.microsoft.com/en-us/library/hh213125.aspx

SELECT ATextField + '=' + cast(AnIntegerField as varchar(50)) + 
case when lead(xxxxxxx add specific code here xxxxxx) then ',' else '' end
FROM table1 join table2 .... join tableN

【讨论】:

【参考方案2】:

根据 Reboon 的建议,这里有一个可插拔的解决方案:

WITH cte (KeyNumber, TextValue) AS (
    SELECT t1.AnIntegerField, t3.ATextField
    FROM Schema1.Table1 t1
    JOIN Schema2.Table2 t2 ON t1.JField1 = t2.JField2
    JOIN Schema3.Table3 t3 ON t2.JField1 = t3.JField2
    WHERE t1.FField1 = N'filter on this value'
)
SELECT TextValue + N' = ' + CONVERT(NVARCHAR(10), KeyNumber) + CASE WHEN (LEAD(1) OVER(ORDER BY TextValue)) IS NULL THEN N'' ELSE N',' END AS EnumAssignment
FROM (
SELECT DISTINCT TOP 100 PERCENT KeyNumber, TextValue
FROM cte
ORDER BY TextValue ) w

【讨论】:

以上是关于T-SQL:如何将逗号连接到除最终记录之外的所有文本字段的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:除 phpPgAdmin 之外的所有权限都被拒绝

使用除 oracle 之外的另一个 linux 用户连接到 sqlplus

无法使用除 SSMS 之外的任何东西连接到 SQL Server 2016 SP1

Rails 去除除数字逗号和小数点以外的所有内容

RegEx 用于匹配除逗号分隔的数字之外的所有字符

如何只允许隧道连接到端口?