Sql Sybase:如何连接Sybase列中的行

Sql Sybase:如何连接Sybase列中的行,sql,tsql,concatenation,sybase,Sql,Tsql,Concatenation,Sybase,我有一张带ID和部门的桌子 桌子是 id dept salary date 1 30 2000 8/25/2015 12:06:54.870 PM 2 20 5500 7/12/2015 12:06:54.870 PM 3 30 6700 11/21/2013 12:06:54.870 PM 4 30 8900 4/16/2009 12:06:54.870 PM 5 30 9900 6/

我有一张带ID和部门的桌子

桌子是

id  dept    salary  date
1   30      2000    8/25/2015 12:06:54.870 PM
2   20      5500    7/12/2015 12:06:54.870 PM
3   30      6700    11/21/2013 12:06:54.870 PM
4   30      8900    4/16/2009 12:06:54.870 PM
5   30      9900    6/29/2014 12:06:54.870 PM
6   10      1120    7/3/2015 12:06:54.870 PM
7   20      8900    4/13/2013 12:06:54.870 PM
8   10      2400    7/23/2015 12:06:54.870 PM
9   30      2600    8/21/2015 12:06:54.870 PM
10  10      2999    8/3/2015 12:06:54.870 PM
只需要这样的输出

Dept  ID
30     1,3,4,5,9

这是我知道的最好的方法。如果有人知道更好的解决方案,请发帖子:

select dept,list(id,',' order by dept) from TableName group by dept
我已将您的表命名为sal

DECLARE @id     INT
        , @max  INT
        , @dep  INT
        , @all  VARCHAR(255)

SELECT  @id = 1
        , @max = MAX(id)
FROM    sal

SELECT * INTO #tmp FROM sal

WHILE (1=1)
BEGIN

    SELECT  @dep = dept
    FROM    #tmp
    WHERE   id = @id

    IF @dep IS NULL
    BEGIN
        SELECT  @id = @id + 1

        IF @id > @max
            BREAK
        ELSE
            CONTINUE
    END

    UPDATE  #tmp
    SET     @all = @all + ',' + CONVERT(VARCHAR, id) 
    WHERE   dept = @dep

    --remove last comma
    select  @all = RIGHT(@all, LEN(@all)-1)

    DELETE  #tmp
    WHERE   dept = @dep

    -- selecting the output. insert into table if you want
    SELECT  @dep, @all

    SELECT  @dep   = NULL
            , @all = NULL

    SELECT  @id = @id + 1

    IF @id > @max
        BREAK

    -- fail safe
    IF @id > 100
        BREAK
END

drop table #tmp

我遇到了类似的问题,并提出了以下解决方案:

select dept,list(id,',' order by dept) from TableName group by dept

假设
TableName
是表的名称

对于那些希望此功能适用于特定查询的人来说,这是一个更简单的解决方案:

DECLARE @res_csv  VARCHAR(10000)
BEGIN
    SELECT SomeIntField INTO #tmp FROM YourTblName WHERE 1=1 -- a hardcoded query
    UPDATE  #tmp
    SET     @res_csv = @res_csv + case when @res_csv is not NULL then ',' end + CONVERT(VARCHAR, SomeIntField) 
    drop table #tmp
    print @res_csv
END

您好Nigel欢迎来到StackOverflow,下次请尝试提供一个示例,以便我们更好地理解问题并更快地给您答案–同时请阅读,这是串联还是更像一个轴心。应该这样工作:@hogan Q:
Stuff
XML路径
是通用tsql吗?因为这个问题说sybase.@JuanCarlosOropeza-xml支持和替换支持存在于所有现代数据库平台中。我不知道sybase的细节,所以我没有给出答案,而是发表了评论。