SQL查询根据另一列中的值扩展一列

时间:2014-12-04 13:18:08

标签: sql

我有一个表格,其中包含一个问题列和一个响应列以及许多其他字段。每行都有与之关联的版本号,因此您可以了解最新的问题和答案组。因此该表看起来像:

from_cntry     to_cntry     Version   question           answer     
Peru           Egypt          39      Max Comp          unlimited
Peru           Egypt          38      Maxx Comp         unlimited 
Peru           Egypt          39      Actual Comp       Determined by country agreement 
Brazil         Cameroon       39      Actual Comp       Determined by country agreement 
Brazil         Cameroon       39      Max Comp          300000
Brazil         Cameroon       38      Max Comp          Unlimited 

对于最新版本的回复,我想在标题为相应问题的列中显示回复,如下所示:

From_cntry      To_cntry        Max Comp      Actual Comp
 Peru            Egypt           unlimited    Determined by country agreement  
Brazil          Cameroon          300000       Determined by country agreement

(我无法弄清楚如何在这里显示列,所以我在其中包含了新列的逗号)

我能够得到问题和回答以显示我想要的方式,但是当我尝试包含其他字段时,我收到错误。以下内容适用于扩展问题和响应信息。

SELECT    
     MAX(CASE WHEN Question = 'Max Comp' THEN response else null END)  as Max Comp
    ,MAX(CASE WHEN Question = 'Actual Comp' THEN Response else null end) as Actual Comp
from table  

我将其他字段添加到select语句中,如下所示:

SELECT from_cntry, to_cntry,    
     MAX(CASE WHEN Question = 'Max Comp' THEN response else null END)  as Max Comp
    ,MAX(CASE WHEN Question = 'Actual Comp' THEN Response else null end) as Actual Comp
from table    

我收到以下错误:不是单组组功能。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

你错过了group by。使用聚合时,所选的所有列都应该在您的组中。

SELECT from_cntry, to_cntry,    
     MAX(CASE WHEN Question = 'Max Comp' THEN response else null END)  as Max Comp
    ,MAX(CASE WHEN Question = 'Actual Comp' THEN Response else null end) as Actual Comp
from table
group by from_cntry, to_cntry     

答案 1 :(得分:0)

如果要使用聚合函数(例如SUM,COUNT,MAX,MIN ..),则必须按照select中的所有其他列进行分组。因此,您的选择应如下所示:

SELECT from_cntry, to_cntry,    
     MAX(CASE WHEN Question = 'Max Comp' THEN response else null END)  as Max Comp
    ,MAX(CASE WHEN Question = 'Actual Comp' THEN Response else null end) as Actual Comp
from table 

Group by from_cntry, to_cntry