如何设置子查询选择案例变量的值

时间:2015-06-19 11:47:27

标签: mysql subquery case assign

如何在MySQL中的下面的查询中为row_num和accid预分配值。请帮忙!!!!!!!!!!!

存储过程的一部分,

我声明了变量并将值分配为

DECLARE row_num int;
DECLARE accid int;
SET row_num:=1;
SET accid:=1;

以上分配的值未在以下查询中设置。它转到else部分并将1返回到所有行。

INSERT INTO test1 (accountid,claum,opaum,valuationdate,rownumber)
SELECT accountid,
       claum,
       0,
       valuationdate,
       rownumber
FROM
  (SELECT accountid, 
          valuationdate, 
          claum, 
          @row_num:=(CASE WHEN @accid= accountid THEN @row_num+1 ELSE 1 END) AS rownumber, 
          @accid:=accountid AS acc
   FROM
     (SELECT accountid,
             valuationdate,
             SUM(aum) claum
      FROM tempaum
      GROUP BY accountid,
               valuationdate
      ORDER BY accountid,
               valuationdate) A
  ) claum;

1 个答案:

答案 0 :(得分:1)

您可以使用子查询设置值。此外,您应该在单个语句中执行所有变量赋值。 MySQL不保证select语句中语句的评估顺序。所以:

INSERT INTO test1(accountid, claum, opaum, valuationdate, rownumber)
    SELECT accountid, claum, 0, valuationdate, rownumber
    FROM (SELECT accountid, valuationdate, claum, 
                 (@row_num := (CASE WHEN @accid = accountid THEN @row_num + 1
                                    WHEN @accid := accountid THEN 1
                                    ELSE 1
                               END) ) AS rownumber
          FROM (SELECT accountid, valuationdate, SUM(aum) as claum
                FROM tempaum
                GROUP BY accountid, valuationdate
               ) A CROSS JOIN
               (select @row_num := 0, @accid := NULL) params
          ORDER BY accountid, valuationdate
         ) claum;