Mysql 如何设置子查询select case变量的值

Mysql 如何设置子查询select case变量的值,mysql,subquery,case,assign,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,

如何在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;

可以使用子查询设置值。此外,您应该在一条语句中完成所有变量赋值。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;

请尝试格式化查询,使其可读。另外,在插入中包括列列表。有什么想法吗@GordonLinoffrow_num和accid值未在子查询select case语句中初始化,