2016-05-21 2 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- a-subquery-into)を使用します。 –

+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 
関連する問題