日期:2014-05-16  浏览次数:20696 次

在存储过程中,怎样判断select的查询值?
我做的是sql server2005中的存储过程
/*取出期初,插入*/
INSERT INTO Sdt_StatUser_Table (UserID,UserName,DeptID,BDate,TypeID,Ways,BValue,BCount) 
SELECT t1.UserID,t1.UserName,t1.DeptID,@TempDate,0,1,IsNull(t2.BValue,0),IsNull(t2.BCount,0)
FROM (select UserID,UserName,DeptID from #Temp group by UserID,UserName,DeptID) t1
LEFT OUTER JOIN 
(
SELECT UserID,BValue,BCount
FROM Sdt_StatUser_Table
WHERE (TypeID=999 AND BDate=CONVERT(CHAR(10),CONVERT(DATETIME,@TempDate)-1,120) 
group by UserID,BValue,BCount
) t2 
on t2.UserID=t1.UserID
现在这个也可以查询,但是查询的BValue的值有的为0,
其实这是一个钱包的查询,
例如查询的时间是2014-03-02,
这里的BValue是钱包里这一天开始时的全部金额,这个值不能为0,因为这个值等于2014-03-01剩下的余额(余额是通过计算查询出来的)。所以现在就是要判断LEFT OUTER JOIN 里面是查询的2014-03-01的余额,里面查询的结果中BValue的值,如果不等于0就直接查询就可以,但是要是等于0了就得查询这一天的前一天的余额
求余额的算法是
/*计算期末,插入*/
INSERT INTO Sdt_StatUser_Table (UserID,UserName,DeptID,BDate,TypeID,Ways,BValue,BCount) 
SELECT t1.UserID,t1.UserName,t1.DeptID,@TempDate,999,1,ISNULL(t2.BValue,0),ISNULL(t2.BValue,0)
FROM (select UserID,UserName,DeptID from #Temp group by UserID,UserName,DeptID) t1
LEFT OUTER JOIN
(
SELECT UserID,SUM((BValue)*(Ways)) BValue,SUM(BCount) BCount
FROM Sdt_StatUser_Table
WHERE TypeID<>999 AND BDate=CONVERT(CHAR(10),CONVERT(DATETIME,@TempDate),120)
group by UserID
) t2
on t2.UserID=t1.UserID
我知道是要进行判断BValue的值,但是我不知道要在那里插入判断,还有if else 要怎样写,或者用case when也可以。
紧急求助!!!谢谢...
------解决方案--------------------
定义一个变量存储SELECT 的返回值,然后对变量做判断,不过每个变量只能存放一个值,如果要多个值存储,需要换表变量
------解决方案--------------------
if else的用法斑竹说的很清楚了,case when的话需要再做一个前日的子查询 ,如果case BValue为0,就用子查询里的对应字段 
------解决方案--------------------
可以是可以,最后好在from里做子查询,FROM Sdt_StatUser_Table,(子查询) 别名