2

正しく動作しないコードが少しあります。私に問題を与えている部分はこれです:

IF( Class_Subset = @prevSub AND RegNum = @prevNum AND `DRI` >99.99 ,
@Platinum :=@Platinum + 1 ,''  )

私がする必要があるのは、 またはの条件が満たされなくなったら、@Platinumにリセットするように指示することです。zeroClass_SubsetRegNum

何か案は?

コード全体:

SELECT  
 Harley.Hgt, Harley.RegNum, Harley.Callname, Harley.OLastname,  
 Harley.Tpe, Harley.Points, Harley.Class, Harley.Total_Points,  
 Harley.Title, Harley.Platinum, Harley.Silver_Purple,  
 Harley.Date_Earned, Harley.Judge, Harley.HostClub, Harley.DRI,  
 Harley.Class_Subset, Harley.IncorrectRegNum, Harley.MemNum, Harley.ID
FROM
 (
   SELECT
    Hgt, RegNum, Callname, OLastname, Tpe, Points, Class,  
    Total_Points, Title, Silver_Purple, Date_Earned, Judge,  
    HostClub, DRI, Class_Subset, IncorrectRegNum, MemNum, ID, 
    IF (
     Class_Subset = @prevSub  
     AND RegNum = @prevNum  
     AND `DRI` > 99.99,  
     @Platinum := @Platinum + 1,  
     0
    ) AS Platinum,  
    @prevSub := Class_Subset,  
    @prevNum := RegNum
   FROM  
    Harley,  
    (  
      SELECT @Platinum := 0, @prevSub := '', @prevNum := ''  
    ) r  
   ORDER BY RegNum, Class_Subset, Date_Earned  
 ) Harley

ファイルは次のようになります。RegNum と Subset が一致している間は変数を記憶しておく必要があるのに、変更後に 0 にリセットする必要がある理由がわかります。

サンプルデータ http://nadacforum.com/Platinum.png

4

2 に答える 2

1

私は今問題を見ていると思います。

Platinumが計算されている行セットは (特に) RegNumandによってClass_Subset並べ替えられています。これは、計算が並べ替えられている列に依存しているため問題ありません。ただし、IF()条件にはDRI列も含まれます。スクリーンショットでわかるように、DRIより大きい一連の値99.99は、単一のグループ内で中断される可能性があります(RegNum, Class_Subset)。復元された場合、プラチナ値を継続する必要があります。リセットする必要はありません1

したがって、@Platinum表現はもう少し洗練されたものにする必要があります。これを変更する 1 つの方法を次に示します。

@Platinum := IF (
 Class_Subset = @prevSub  
 AND RegNum = @prevNum  
 AND `DRI` > 99.99,
 @Platinum,  
 0
) + (`DRI` > 99.99) AS Platinum,  
于 2012-06-01T05:25:53.313 に答える
0

あなたは探している必要があります:

if(
    Class_Subset = @prevSub 
    AND RegNum = @prevNum 
    AND `DRI` >99.99,
    @Platinum + 1,
    0
) into @Platinum

上記の変更により、クエリは次のようになります。

select /* some fields here, */ if ( ...as above... from ...
于 2012-05-31T03:40:51.447 に答える