我有一个只有两列的表,用于为图像分配注释。
第一列包含图像ID,第二列包含关联的注释ID。 图像可以有多个注释,但每个注释都有唯一的注释ID。
基于此,我希望根据每个图片的评论数量按降序排列排名,以便评论最多的图片显示在顶部。
我尝试了以下内容,但SQL不接受Distinct和XML的组合。 在这里使用Distinct的想法是摆脱重复,因为我只希望每个图像在结果中出现一次。
有人可以告诉我如何实现这个目标吗?
我的SQL:
BEGIN
SET NOCOUNT ON;
SELECT DISTINCT Top 20 A.imgID,
COUNT(*) OVER() AS volume,
(
SELECT B.commentID,
COUNT(*) OVER() AS volume
FROM MOC_ImgComments B
WHERE B.imgID = A.imgID
FOR XML PATH(''), ELEMENTS, TYPE
)
FROM MOC_ImgComments A
ORDER BY volume desc, A.imgID
FOR XML PATH('images'), ELEMENTS, TYPE, ROOT('ranks')
END
非常感谢任何帮助,蒂姆。
答案 0 :(得分:1)
请尝试使用GROUP BY子句。我没有测试下面的代码。
BEGIN
SET NOCOUNT ON;
SELECT Top 20 A.imgID,
COUNT(*) OVER() AS volume,
(
SELECT B.commentID,
COUNT(*) OVER() AS volume
FROM MOC_ImgComments B
WHERE B.imgID = A.imgID
FOR XML PATH(''), ELEMENTS, TYPE
)
FROM MOC_ImgComments A
ORDER BY volume desc, A.imgID
FOR XML PATH('images'), ELEMENTS, TYPE, ROOT('ranks')
group by A.imgID
END