代码之家  ›  专栏  ›  技术社区  ›  Dreamer

将列值放入带有逗号分隔符的单个单元格中

  •  0
  • Dreamer  · 技术社区  · 5 年前

    考虑SQL Server中的表有一列 Item ,我试图创建一个查询,将列中的所有值转换为单个单元格,结果转换为逗号分隔的字符串,例如:

    桌子

    | Item |
    --------
    | milk |
    | sugar|
    | salt |
    | .... |
    

    查询结果:

    |       Item List         |
    ---------------------------
    | milk, sugar, salt ..... |
    

    最好有一些定制

    |                    Item List                     |
    ----------------------------------------------------
    | milk as milk, sugar as sugar, salt as salt ..... |
    

    我看到有一个选项 unpivot 但是,它必须是列中值的决定性数量。只是想知道如果目标列值是动态的,是否有任何可用的函数来支持这一目标

    1 回复  |  直到 5 年前
        1
  •  2
  •   pwilcox    5 年前

    考虑您想要填充:

    declare @csv nvarchar(max);
    

    如果您有sql server 2016或更早版本:

    set @csv = 
        stuff((
            select  ',' + item + ' as ' + item
            from    @data
            for     xml path('')
        ),1,1,'');
    

    如果您拥有sql server 2017或更高版本:

    set @csv = (
        select  string_agg (item + ' as ' + item, ',')
        from    @data
    );