2015-10-16 93 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 
相關問題