2014-12-04 73 views
0

我有一张表,其中包含问题列和响应列以及其他一些字段。每一行都有与之相关的版本号,以便您了解最新的问题和回答是什么。所以表看起来像: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  

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

任何帮助,将不胜感激。

回答

0

如果你想使用聚合函数(如SUM,COUNT,MAX,MIN ..),你必须按你选择的所有其他列进行分组。所以你的选择应该看起来像:

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

您错过了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  
相关问题