我们如何根据传递的参数对查询结果进行分组。
下面显示了一个小的存储过程。参数Param传递给过程。
如果参数值为“f”,则结果必须按starttime分组,否则使用formid。我怎样才能做到这一点。我尝试了下面的代码,但它不起作用。
DROP PROCEDURE IF EXISTS Test;
CREATE PROCEDURE Test (Param VARCHAR (2))
BEGIN
SELECT formid, starttime
FROM tbevaluationscoreinfo
CASE Param
when 'F'
then group by starttime;
else
group by formid;
end
END;
答案 0 :(得分:2)
一种方法是将分支提升到一个水平:
IF Param = 'F' THEN
SELECT starttime, count(formid)
FROM tbevaluationscoreinfo
GROUP BY starttime;
ELSE
SELECT formid, count(starttime)
FROM tbevaluationscoreinfo
GROUP BY formid;
END IF;
另一个不太推荐的解决方案是动态SQL。
第三种可能的解决方案是:
SELECT
case Param when 'F' then starttime else formid end as group_column,
count(formid),
count(starttime)
FROM
tbevaluationscoreinfo
GROUP BY
group_column;