T-SQL:如何将逗号连接到除最终记录以外的所有文本字段
T-SQL: How to concatenate a comma to a text field for all but final record
我想知道如何编写可以将逗号附加到除最终记录之外的所有选定记录的文本字段的查询。
我想创建一个通用函数,它可以包装一个查询来为 C# 和 TypeScript 创建枚举赋值语句。这是一个通用查询:
SELECT ATextField, AnIntegerField
FROM table1 join table2 .... join tableN
包装函数应 return 不同的值按以下格式按文本字段排序:
TextValue1 = 15,
TextValue2 = 3,
...
TextValueN = 128 --No comma here on the final record
没有尝试,因为你没有提供任何样本数据,但可能你可以使用 LEAD 函数来检查是否有任何后续行,如果没有,你设置一个 "comma":
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
按照 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
我想知道如何编写可以将逗号附加到除最终记录之外的所有选定记录的文本字段的查询。
我想创建一个通用函数,它可以包装一个查询来为 C# 和 TypeScript 创建枚举赋值语句。这是一个通用查询:
SELECT ATextField, AnIntegerField
FROM table1 join table2 .... join tableN
包装函数应 return 不同的值按以下格式按文本字段排序:
TextValue1 = 15,
TextValue2 = 3,
...
TextValueN = 128 --No comma here on the final record
没有尝试,因为你没有提供任何样本数据,但可能你可以使用 LEAD 函数来检查是否有任何后续行,如果没有,你设置一个 "comma":
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
按照 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