2010-11-13 126 views
1

如何根据传递的参数对查询结果进行分组。如何根据参数值对查询结果进行分组

一个小的存储过程如下所示。参数Param传递给过程。

如果参数值为“f”,则结果必须按启动时间进行分组,否则使用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

您需要使用动态SQL。 – ksogor 2010-11-13 08:43:20

+0

@ksogor,不一定:) – Constantin 2010-11-13 15:10:36

回答

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; 
+0

谢谢你的回复。其实我的原始存储过程非常大。我在问题中写的存储过程只是一个模板。因此,使用if来分支查询使得我的程序的大小太大了。这是唯一的方法吗?然后我强迫它做:( – 2010-11-13 09:10:29

+0

@Null指针,请尝试第三种解决方案。不幸的是,我现在无法测试它,请告诉我它是否适用于您 – Constantin 2010-11-13 09:12:36

+0

@Null指针,谢谢!我编辑了答案,那是你的意思吗? – Constantin 2010-11-13 09:41:09

相关问题