現在、いくつかのフィールドを返すSQLクエリがあります。事実上、サブクエリサブであるためには、フィールドが必要です。
問題の詳細:
ModuleIDとModuleValueという2つの列を持つテーブルXがある場合、結果を取得して1つのフィールドに連結するSQLクエリを作成するにはどうすればよいですか。
[〜#〜] eg [〜#〜]から返された結果
(SELECT ModuleValue FROM Table_X WHERE ModuleID=@ModuleID)
値1
値2
値3
...
したがって、結果を返す必要があります(上記とは異なり、単一の行として):
値1、値2、値3
ユーザーになる可能性のある単純な連結方法はありますか?
編集:
DBはMS TSQL(2005)です
MSSQLを使用すると、次のようなことができます。
declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', '
from TableX where ModuleId = @ModuleId
これは、他のほとんどの回答とは異なり、末尾のコンマを自動的に除外します。
DECLARE @csv VARCHAR(1000)
SELECT @csv = COALESCE(@csv + ',', '') + ModuleValue
FROM Table_X
WHERE ModuleID = @ModuleID
(ModuleValue
列がまだ文字列型でない場合は、VARCHAR
にキャストする必要があるかもしれません)
Mysqlでは、次の関数を使用します。
SELECT GROUP_CONCAT(ModuleValue, ",") FROM Table_X WHERE ModuleID=@ModuleID
どの方言を使用しているかわかりません。
SQL Server 2005以降では、次のようなことができます。
SELECT
(SELECT ModuleValue + ','
FROM dbo.Modules
FOR XML PATH('')
)
FROM dbo.Modules
WHERE ModuleID = 1
これにより、探しているもののようなものが得られます。
マーク
使用しているデータベースによって異なります。たとえば、MySQLは(非標準) group_concat 関数をサポートしています。だからあなたは書くことができます:
SELECT GROUP_CONCAT(ModuleValue) FROM Table_X WHERE ModuleID=@ModuleID
ただし、すべてのデータベースサーバーでグループ連結は使用できません。
Marcの小さなアップデートで、最後に「」が追加されます。私はスタッフ関数を使用して余分なセミコロンを削除しました。
SELECT STUFF(( SELECT ',' + ModuleValue AS ModuleValue
FROM ModuleValue WHERE ModuleID=@ModuleID
FOR XML PATH('')
), 1, 1, '' )