このようなデータがテーブルにある場合
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
PostgreSQL の場合、同様の関数string_aggを使用します。
SELECT id, string_agg(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 の単純な GROUP BY でこれを行うことはできません。各グループの値を手動で連結するには、カーソル (または同様の構造) を使用する必要があります。
SQL サーバーの場合:
SELECT id, STRING_AGG(data, ',')
FROM your_table
GROUP BY id;
カーソルを使用する必要があると思います ( http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/50501;pt=50305 )
これを試してください:
SELECT id,
GROUP_CONCAT(data)
FROM table
GROUP BY id
構文を試してから数年が経ち、iAnywhereインスタンスにアクセスできなくなりましたが、そのようなタスクを実行するための集計関数(リスト)がありました。LIST()がまだサポートされているかどうかを確認できません。
SELECT id,
LIST(data)
FROM table
GROUP BY id