49

このようなデータがテーブルにある場合

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
4

13 に答える 13

14

MySQLにはGROUP_CONCATがあり、Sybaseには別の回答で述べられているようにLISTだと思います:

SELECT id, LIST(data||', ')
FROM yourtable
GROUP BY id
于 2009-01-30T03:37:09.443 に答える
11

PostgreSQL の場合、同様の関数string_aggを使用します。

SELECT id, string_agg(data, ',')
FROM yourtable
GROUP BY id
于 2016-02-27T01:26:56.870 に答える
6

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
于 2009-01-29T13:56:10.597 に答える
3

単純な SQL の単純な GROUP BY でこれを行うことはできません。各グループの値を手動で連結するには、カーソル (または同様の構造) を使用する必要があります。

  • Oracle では、PL/SQL でこの連結を行うカスタム アグリゲータを定義できます。
  • SQL Server では、同様にこれを行うカスタム アグリゲーターを .NET で定義できます。
  • ただし、Sybase がカスタム アグリゲーターを定義するためにどのようなオプションを持っているかはわかりません。
于 2009-01-29T13:40:08.257 に答える
3

SQL サーバーの場合:

SELECT id, STRING_AGG(data, ',')
FROM your_table
GROUP BY id;
于 2021-04-08T11:46:27.210 に答える
1

カーソルを使用する必要があると思います ( http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/50501;pt=50305 )

于 2009-01-29T13:40:55.463 に答える
1

これを試してください:

SELECT id,
       GROUP_CONCAT(data)
FROM   table
GROUP BY id
于 2014-02-26T18:37:23.180 に答える
0

構文を試してから数年が経ち、iAnywhereインスタンスにアクセスできなくなりましたが、そのようなタスクを実行するための集計関数(リスト)がありました。LIST()がまだサポートされているかどうかを確認できません。

SELECT id,
       LIST(data)
FROM   table
GROUP BY id
于 2009-01-29T13:52:20.200 に答える