【问题标题】:SQl Server multiple rows group bySQL Server 多行分组方式
【发布时间】:2017-02-03 12:21:18
【问题描述】:

假设我有这两张桌子:

ID  Time  UserId
1   08:00   55
2   08:00   22
3   08:00   04
4   09:00   17
5   11:00   11
...etc...

UserId  Name
01      Brian
02      Francis
03      David
...etc...

我想要的结果是:

Hours(distinct)   Name
08:00             Franck,Michelle,Damian
09:00             Indiana, Robert

事实上,我希望所有不同的时间都列在第一列中,并且所有用户的名称都列在一行中。我试过这个查询:

SELECT distinct convert (varchar(25),Time ,120) ,test = STUFF (( SELECT ',' + Name From T2 WHERE T1.UserId=T2.Id FOR XML PATH('')), 1,1,'') 从 T1 组按时间

查询在没有 group by 的情况下工作,但它会触发错误“列 'UserId' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。”

有什么想法吗?

【问题讨论】:

  • 去掉group BY Time部分。
  • 如果我去掉 group by ,每行只有一个名字...

标签: sql sql-server group-by


【解决方案1】:

试试这个

SELECT DISTINCT
    T.Time
    STUFF(
        (SELECT
            ',' + T2.Name
        FROM
            Table1 T1 INNER JOIN 
            Table2 T2 ON T1.UserId = T2.UserId
        WHERE
            T1.Time = T.Time
        FOR XML PATH('')
    ), 1, 1, '') A
FROM
    Table1 T

【讨论】:

    【解决方案2】:

    XML 聚合只能依赖于 GROUP BY 中列出的列,在您的情况下为 time

    SELECT distinct convert (varchar(25),Time ,120) 
     ,test = STUFF (( 
        SELECT ',' + Name 
        FROM T2 
        WHERE T2.UserId IN (
             SELECT T3.UserID 
             FROM T1 AS T3
             WHERE T3.time=T0.time)
       FOR XML PATH('')), 1,1,'') 
    FROM T1 as T0 
    GROUP BY Time
    

    【讨论】:

    • NEER 在这方面打败了你,但你的解决方案和他一样顺利。非常感谢 :m)。
    【解决方案3】:

    你可以试试这样的查询

    ;WITH cte
    AS (SELECT
      t1.time, t1.userid, t2.name
    FROM tab1 t1
    JOIN tab2 t2
      ON t1.userid = t2.userid)
    SELECT
      c.time,
      (STUFF((SELECT ',' + d.name
      FROM cte d
      WHERE c.time = d.time
      FOR xml PATH ('')), 1, 1, '')) AS Test
    FROM cte c
    GROUP BY c.time
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2021-02-03
      • 2022-01-24
      • 2021-12-08
      • 2020-08-08
      • 2010-10-07
      • 1970-01-01
      相关资源
      最近更新 更多