【问题标题】:Create a comma seperated result in SQL Server [duplicate]在 SQL Server 中创建逗号分隔的结果 [重复]
【发布时间】:2011-12-25 12:38:21
【问题描述】:

可能重复:
Simulating group_concat MySQL function in MS SQL Server 2005?
Concat field value to string in SQL Server

涉及 2 个表,用户和关键字。

用户
用户ID
名字

...

关键字
用户ID
关键字

如果我运行这个查询:

select u.userId, u.firstName, u.lastName, k.keyword 
from Users as u 
inner join  Keywords as k on u.userId = k.userId

我得到这样的东西:

我想要的是这个:

This looked very similar to what I wanted 但我似乎无法让它正常工作。

【问题讨论】:

    标签: sql sql-server-2008 tsql


    【解决方案1】:
    SELECT
           u.userId,
           u.firstName,
           u.lastName,
           (select keyword +', ' from Keywords tk where tk.userid= u.userid for xml path ('')  )   as keyword
      FROM
           Users AS u 
    

    要测试的示例查询:

    declare @Users as table(
    userid int,
    firstname varchar(20),
    lastname varchar(20)
    
    )
    
    declare @Keywords as table(
    userid int,
    keyword varchar(20)
    
    )
    
    insert into @Users
    values(
    1, 'Bob','Sanders'
    ),
    (
    2, 'Jamie','Smith'
    )
    
    insert into @Keywords
    values 
    (1,'Cars'),
    (1,'Pizza'),
    (2,'Tomato'),
    (2,'Blah')
    
    SELECT
           u.userId,
           u.firstName,
           u.lastName,
           (select keyword +', ' from @Keywords tk where tk.userid= u.userid for xml path ('')  )   as keyword
      FROM
           @Users AS u 
    

    返回:

    userId  firstName   lastName    keyword
    1       Bob         Sanders     Cars, Pizza, 
    2       Jamie       Smith       Tomato, Blah, 
    

    【讨论】:

      【解决方案2】:
      ;WITH a AS (
        SELECT 
          u.userId,
          u.firstName,
          u.lastName,
          ( SELECT k.keyword + ',' 
            FROM Keywords k
            WHERE k.userId = u.userId
            ORDER BY k.keyword
            FOR XML PATH('') 
          ) AS [keyword]
        FROM Users u
      )
      SELECT 
        a.userId,
        a.firstName,
        a.lastName,
        -- strip off trailing comma
        LEFT(
          a.keyword, 
          LEN(a.keyword)-1
        ) AS keyword
      FROM a   
      

      【讨论】:

        【解决方案3】:

        您可以创建一个新的 sql 聚合函数 concat 来连接文本并在查询中使用 if:

        select userId, firstName, Lastname, concat(Keyword)
        from Users
        group by userId, firstName, Lastname;
        

        以下链接显示了有关如何创建 concat 函数的示例。 http://msdn.microsoft.com/en-us/library/ms182741.aspx

        【讨论】:

          猜你喜欢
          • 2012-02-21
          • 2021-11-17
          • 2014-04-01
          • 2016-03-08
          • 1970-01-01
          相关资源
          最近更新 更多