在SQL Server中按组查询问题

时间:2018-09-16 23:14:03

标签: sql sql-server

我有此查询可在MySQL中使用:

SELECT 
    r.*, c.*
FROM 
    Rsv AS r
INNER JOIN 
    Clts AS c ON r.ClientID = c.ClientID
LEFT OUTER 
    Mes AS m ON r.MesaID = m.MesaID
WHERE 
    RHS IS NULL AND RC = 0
GROUP BY 
    r.ClientID;

我希望它可以在SQL Server中工作,并且我知道在SQL Server中,当您使用GROUP BY时,SELECT中的元素必须位于GROUP BY中,或者需要具有汇总功能。但是我想选择更多的元素,并且我认为我不需要它们上的聚合函数,因为无论从哪个元素中检索信息都没有关系,因为仅MesaNum字段会有所不同。我该如何实现?

编辑:

Rsv表:

RsvID    MesaID    ClientID    RsvTime      RsvDate    RHS    RC
    1         1           1       8:00   2018-09-17   null     0
    2         2           1       8:00   2018-09-17   null     0
    3         3           2       9:00   2018-09-17   null     0

所需结果:

RsvID    MesaID    ClientID    RsvTime     RsvDate    RHS    RC
    1       1,2           1       8:00   2018-09-17  null     0
    3         3           2       9:00   2018-09-17  null     0

(对不起,在这里找不到表格)

1 个答案:

答案 0 :(得分:1)

您可以尝试使用STUFF函数执行groupby_concat,然后通过ClientID来获得行号rn = 1

SELECT * FROM (
    SELECT RsvID,ClientID,RsvTime,RsvDate,RHS,RC,
           STUFF((
              SELECT ',' + CAST(tt.MesaID AS VARCHAR(5))
              FROM Rsv tt
              WHERE tt.ClientID = t1.ClientID
              FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') MesaID,
           ROW_NUMBER() OVER(PARTITION BY ClientID ORDER BY RsvID) rn
    FROM Rsv t1
) t1
where rn = 1

sqlfiddle