このようなデータがテーブルにある場合
id data
-- ----
1 1
1 2
1 3
2 4
2 5
3 6
3 4
(Sybaseサーバー上の)クエリでこのような結果を取得するにはどうすればよいですか?
id data
-- ----
1 1, 2, 3
2 4, 5
3 6, 4
MySQLには GROUP_CONCAT があり、Sybaseには別の回答で述べられているように [〜#〜] list [〜#〜] があることを知っています。
SELECT id, LIST(data||', ')
FROM yourtable
GROUP BY id
MsSQLでは、関数を使用できます(SyBaseに類似したものがあるかどうかはわかりません)
CREATE FUNCTION [dbo].[GetDataForID]
(
@ID int
)
RETURNS varchar(max)
AS
BEGIN
declare @output varchar(max)
select @output = COALESCE(@output + ', ', '') + data
from table
where ID = @ID
return @output
END
GO
その後:
SELECT ID, dbo.GetDataForID(ID) as Data
FROM Table
GROUP BY ID
プレーンバニラSQLのストレートGROUPBYでこれを行うことはできません。各グループの値を手動で連結するには、カーソル(または同様の構成)を使用する必要があります。
PL/SQLでは、次の方法で実行できます。
SELECT id, LISTAGG(data, ',') WITHIN GROUP(ORDER BY 0) "data"
FROM yourtable
GROUP BY id
PostgreSQLの場合、同様の関数を使用します string_agg 。
SELECT id, string_agg(data, ',')
FROM yourtable
GROUP BY id
SQL Serverの場合:
select distinct b.id, data=STUFF((select ',' +convert(varchar,id)
from yourtable a
where a.id=b.id
for xml path ('')),1,1,'')
from yourtable b
Mysqlでは、
SELECT id, GROUP_CONCAT(data)
FROM yourtable
GROUP BY id
または、カスタムセパレータを使用します。
SELECT id, GROUP_CONCAT(data SEPARATOR ', ')
FROM yourtable
GROUP BY id
GROUP_CONCAT を参照してください。
構文を使用してから数年が経ち、iAnywhereインスタンスにアクセスできなくなりましたが、そのようなタスクを実行するための集計関数(リスト)がありました。 LIST()がまだサポートされているかどうかを確認できません。
SELECT id,
LIST(data)
FROM table
GROUP BY id
これを試してください:
SELECT id,
GROUP_CONCAT(data)
FROM table
GROUP BY id