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