SQL Server:在Select中调整Rank语句的问题

时间:2014-04-23 16:10:08

标签: sql sql-server stored-procedures ranking rank

我有一个动态存储过程,它从temp表的声明开始,然后是insert语句。

有人可以告诉我如何调整以下行,以便根据groupCount(desc)而不是Count创建排名吗?

当我只说groupCount而不是Count时,它会返回:

  

无效的列名'groupCount'

有问题的一行:

RANK() OVER(ORDER BY COUNT(*) desc, <sel>) [Rank],

我的程序(第一部分):

   SET @sql = N' DECLARE @temp AS TABLE
    (
                ranking int,
                item nvarchar(100),
                totalCount int,
                matchCount int,
                groupCount int,
                groupName nvarchar(100)
    )

    INSERT INTO @temp
    (
                ranking,
                item,
                totalCount,
                matchCount,
                groupCount,
                groupName
    )
    SELECT      RANK() OVER(ORDER BY COUNT(*) desc, <sel>) [Rank],
                <sel>,
                COUNT(*) AS totalCount,
                SUM(CASE WHEN suggestedAction = recommendation THEN 1 ELSE 0 END) AS matchCount,
                ROUND(100 * AVG(CASE WHEN suggestedAction = recommendation THEN 1.0 ELSE 0.0 END), 0) AS groupCount,
                ''currentMonth'' AS groupName
    FROM        LogEsc
    WHERE       dateEsc LIKE ''' + @date0 + '%''
    AND         EID LIKE ''PE%''
    GROUP BY    <sel>
    ORDER BY    groupCount desc, <sel>
        -- ...
蒂姆,非常感谢你提供任何帮助。

1 个答案:

答案 0 :(得分:1)

您无法使用别名。

使用

ORDER BY ROUND(100 * AVG(CASE WHEN suggestedAction = recommendation THEN 1.0 ELSE 0.0 END), 0)