SQL Server:小查询中的Select和Count问题

时间:2014-08-27 12:55:13

标签: sql sql-server select count distinct

我有一个只有两列的表,用于为图像分配注释。

第一列包含图像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

非常感谢任何帮助,蒂姆。

1 个答案:

答案 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