Mysql 如何设置子查询select case变量的值
如何在MySQL中为下面的查询中的row_num和accid预赋值。请帮忙 存储过程的一部分 我声明了变量,并将值赋值为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,
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语句中初始化,