在 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

(抱歉,无法弄清楚如何在这里做表格(

你可以尝试使用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

最新更新