2015-10-16 91 views
0

的行位置编号这是我的代码如何获得一个表结果

Select @pos = Pos, @ptsReputacion = isnull(AA.PtsReputacion,0) 
    From 
    (Select 
    ROW_NUMBER() OVER (ORDER BY @ptsReputacion DESC) AS Pos 
    , USUARIO.CodUsuario 
    , PtsReputacion = (Select isnull(sum(Puntos),0) as Puntos 
         From USUARIO_RANKING_INTERES 
         Where USUARIO_RANKING_INTERES.CodUsuario = @codUsuario) 
    , USUARIO.CantIntentos as Intentos 
    , USUARIO.CantAciertos as Aciertos 
    , USUARIO.CantFallos as Fallos 
    , isnull(USUARIO.PG,0) as PG 
    , isnull(USUARIO.PE,0) as PE 
    , isnull(USUARIO.PP,0) as PP 
    , isnull(USUARIO.TiempoTotal,0) as TiempoTotal 
    From USUARIO) AA 
    Where AA.CodUsuario = @codUsuario 

但由于波什场具有其他价值它不会工作。例如,它给出2而不是1.

我想知道如何获取一个变量排序的行位置编号(因为该字段是子查询)。

回答

1

它看起来像你真的想做下面的事情。我正在使用CTE,因为这样可以更容易阅读。

WITH BaseQuery AS 
(
SELECT 
    U.CodUsuario 
    , PtsReputacion = (Select isnull(sum(Puntos),0) as Puntos 
        From USUARIO_RANKING_INTERES 
        Where USUARIO_RANKING_INTERES.CodUsuario = U.CodUsuario) 
    , USUARIO.CantIntentos as Intentos 
    , USUARIO.CantAciertos as Aciertos 
    , USUARIO.CantFallos as Fallos 
    , isnull(USUARIO.PG,0) as PG 
    , isnull(USUARIO.PE,0) as PE 
    , isnull(USUARIO.PP,0) as PP 
    , isnull(USUARIO.TiempoTotal,0) as TiempoTotal 
FROM USUARIO U 
), 
RNQuery AS 
(
SELECT 
    * 
    , ROW_NUMBER() OVER (ORDER BY PtsReputacion DESC) AS Pos 
FROM 
    BaseQuery 
) 
SELECT 
    @pos = Pos 
    , @ptsReputacion = isnull(AA.PtsReputacion,0) 
FROM 
    RNQuery AS AA 
WHERE 
    AA.CodUsuario = @codUsuario 
相关问题