2016-05-21 19 views
0

我想知道如何编写可将逗号附加到文本字段的查询,以选择除最终记录以外的所有记录。T-SQL:如何将逗号连接到除最终记录以外的所有记录的文本字段

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

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

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

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

你可以添加ATextField'和'AnIntegerField' –

+0

你可能有其他原因的'样本数据,但我能想到的唯一理由要做到这一点,最终会将其放入一个由逗号分隔的单个字段中。如果这最终是你在做什么,看看[这里](http://stackoverflow.com/questions/6899/how-to-create-a-sql-server-function-to-join-multiple-rows-from-一个-子查询-成)。 –

+1

你为什么试图在TSQL中做到这一点?如果你正在用C#读取它,那么在那里做(这是一个简单的任务)。 – Paparazzi

回答

0

上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 
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 
相关问题