我有此查询可在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
(对不起,在这里找不到表格)
答案 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