【问题标题】:Concat column values with comma as the separator用逗号作为分隔符连接列值
【发布时间】:2016-07-10 03:39:48
【问题描述】:

我正在尝试找出以下查询的结果,即如何将所有列连接成一个带有逗号分隔值的字符串。值的数量可以是动态的。

SELECT 'Sc4','Sc5','Sc8','Sc7','Sc2'

我希望结果如下:

Sc4,Sc5,Sc8,Sc7,Sc2

我尝试过使用东西,但确实设法连接字符串但无法在其间插入逗号。

以下是我尝试过的

SELECT Stuff((SELECT 'Sc4','Sc5','Sc8','Sc7','Sc2' FOR XML PATH('')), 2, 0, '');

更新

我想改一下我的问题,有什么办法可以将下面显示的输出转换为 csv

【问题讨论】:

  • 你可能应该在你的应用程序中这样做,数据库不适合这种事情。
  • 好吧,如果这是一个选项,我会喜欢的。由于一些限制,我必须在 sql 中执行此操作。 @安迪
  • 很公平,但它会对性能产生负面影响,所以要注意。
  • 我们很乐意提供帮助,但事实上,这没有多大意义。一个生成随机 sql 的应用程序——它去哪儿了?您是否在存储过程中收到 select 语句?如果您无法编辑正在运行的应用程序,您实际上是如何执行 sql 的?

标签: sql sql-server sql-server-2008


【解决方案1】:

我假设 Sc4、Sc5 等是您的列名而不是字符串常量?

SELECT Stuff(
             (
                SELECT ',' + Sc4 + ',' + Sc5 + ',' + Sc8 + ',' + Sc7 
                     + ',' + Sc2 
                FROM   yourtable
                FOR XML PATH('')
              ), 1, 1, '');

【讨论】:

    【解决方案2】:

    尝试串联

    SELECT 'Sc4' + ',' + 'Sc5' + ',' + 'Sc8' + ',' + 'Sc7' + ',' + 'Sc2'
    

    【讨论】:

    • 如果它这么简单,那么我就不需要在这里问这个问题了:) 如果你知道这些值,你上面提到的将起作用。我想动态构建 csv。
    • 你的问题不清楚。您发布的内容似乎是一些字符串常量
    • @Dilberted 请提供正确的信息以避免混淆。第一个问题,你的应用是基于什么构建的? (asp、mvc 等)如果您使用的是 c#,您可以将 csv 转换为数据表,然后从那里创建一个与 sql server 2008 中的数据表格式相同的表值类型。您现在可以将数据表传递给存储过程并将其转换为您的表格类型。看到这个链接msdn.microsoft.com/en-us/library/bb675163(v=vs.90).aspx
    猜你喜欢
    • 2021-09-05
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2012-12-22
    相关资源
    最近更新 更多