2012-05-31 51 views
2

我的代码,这一点,我确实不能正常工作。给我找麻烦的部分是这样的:重置变量为0

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

我需要做的是告诉@Platinum来重置回zero一旦Class_Subset,或RegNum条件不再满足。

任何想法?

整个代码:

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和子集比赛,但随后重置为0,一旦他们改变:

sample data http://nadacforum.com/Platinum.png

+0

你想从表达式返回值,还是只将0赋值给变量?你在查询或函数/过程中使用这个吗? – bfavaretto

+0

虽然RegNum和Subset匹配我希望变量保持活动状态,但是一旦这些变化中的任何一个发生变化,我都希望它重置为零。这是在'if' usnig'查询 –

+0

@ChrisNelson捕获输出到@ Platinum'。看到我的回答 –

回答

1

我想我现在看到的问题。

其中Platinum正在计算由RegNumClass_Subset(具体地)排列的行组,作为计算不依赖于这些列进行排序这是好的。但IF()条件还涉及DRI柱,并且,作为可以在自己的屏幕截图可以看出,DRI序列值大于99.99可能的(RegNum, Class_Subset)单个组内被中断。当它恢复,你需要的白金值进行,重置为1

因此,您@Platinum表达应该是有点更复杂。这里有一种改变它的方法:

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

这个工作很完美。我非常感谢帮助。 –

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 ... 
+0

没有骰子。它适用于头等舱,但是一旦它变成新的,变量不会重置。因此,第一堂课的最终总数是43,然后下一个应该从1开始,但是它是44.我附上了上面的整个查询,以防我误认为 –