ORACLE 10g 分组依据成列

ORACLE 10g group by into columns

我有以下查询

select mem.irsc_zona,
(case 
  when mem.irsc_membres = 1
    then mem.irsc_valor
end) "1 membre",
(case 
  when mem.irsc_membres = 2
    then mem.irsc_valor
end) "2 membres",
(case 
  when mem.irsc_membres = 3
    then mem.irsc_valor
end) "3 membres",
(case 
  when mem.irsc_membres = 4
    then mem.irsc_valor
end) "4 membres"
from 
(select aip.irsc_zona, aip.irsc_membres, aip.irsc_valor from
ajt_irsc_peu aip
where aip.IRSC_FACTOR = '2.35'
and aip.IRSC_DATA_FI = TO_DATE('31/12/15')) mem;

返回以下内容

+-----------+----------+-----------+-----------+-----------+
| IRSC_ZONA | 1 membre | 2 membres | 3 membres | 4 membres |
+-----------+----------+-----------+-----------+-----------+
| A         | 2080,46  |           |           |           |
| A         |          | 2144,81   |           |           |
| A         |          |           | 2237,06   |           |
| A         |          |           |           | 2311,62   |
| B         | 1950,43  |           |           |           |
| B         |          | 2010,76   |           |           |
| B         |          |           | 2097,24   |           |
| B         |          |           |           | 2167,14   |
| C         | 1835,7   |           |           |           |
| C         |          | 1892,48   |           |           |
| C         |          |           | 1973,87   |           |
| C         |          |           |           | 2039,66   |
| D         | 1560,35  |           |           |           |
| D         |          | 1608,61   |           |           |
| D         |          |           | 1677,79   |           |
| D         |          |           |           | 1733,72   |
+-----------+----------+-----------+-----------+-----------+

我希望得到以下结果:

+-----------+----------+-----------+-----------+-----------+
| IRSC_ZONA | 1 membre | 2 membres | 3 membres | 4 membres |
+-----------+----------+-----------+-----------+-----------+
| A         | 2080,46  | 2144,81   | 2237,06   | 2311,62   |
| B         | 1950,43  | 2010,76   | 2097,24   | 2167,14   |
| C         | 1835,7   | 1892,48   | 1973,87   | 2039,66   |
| D         | 1560,35  | 1608,61   | 1677,79   | 1733,72   |
+-----------+----------+-----------+-----------+-----------+

所以,我想将结果按 IRSC_ZONA 分组,问题是我得到:

ORA-00979: no es una expresión GROUP BY
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
Error en la línea: 4, columna: 8

我不知道如何重组我的查询以获得预期的结果。

希望我的问题很清楚。 如果没有,请告诉我如何提供更多详细信息。

提前致谢,

您忘记在 case 语句周围添加聚合函数。

像下面这样的东西应该可以解决问题(显然,您可以使用您的实际查询代替我使用 "sample_data" 的地方):

with sample_data as (select 'A' irsc_zona, 2080.46 irsc_valor, 1 irsc_membres from dual union all
                     select 'A' irsc_zona, 2144.81 irsc_valor, 2 irsc_membres from dual union all
                     select 'A' irsc_zona, 2237.06 irsc_valor, 3 irsc_membres from dual union all
                     select 'A' irsc_zona, 2311.62 irsc_valor, 4 irsc_membres from dual union all
                     select 'B' irsc_zona, 1950.43 irsc_valor, 1 irsc_membres from dual union all
                     select 'B' irsc_zona, 2010.76 irsc_valor, 2 irsc_membres from dual union all
                     select 'B' irsc_zona, 2097.24 irsc_valor, 3 irsc_membres from dual union all
                     select 'B' irsc_zona, 2167.14 irsc_valor, 4 irsc_membres from dual union all
                     select 'C' irsc_zona, 1835.7 irsc_valor, 1 irsc_membres from dual union all
                     select 'C' irsc_zona, 1892.48 irsc_valor, 2 irsc_membres from dual union all
                     select 'C' irsc_zona, 1973.87 irsc_valor, 3 irsc_membres from dual union all
                     select 'C' irsc_zona, 2039.66 irsc_valor, 4 irsc_membres from dual union all
                     select 'D' irsc_zona, 1560.35 irsc_valor, 1 irsc_membres from dual union all
                     select 'D' irsc_zona, 1608.61 irsc_valor, 2 irsc_membres from dual union all
                     select 'D' irsc_zona, 1677.79 irsc_valor, 3 irsc_membres from dual union all
                     select 'D' irsc_zona, 1733.72 irsc_valor, 4 irsc_membres from dual)
select irsc_zona,
       sum(decode(irsc_membres, 1, irsc_valor)) "1 membre",
       sum(decode(irsc_membres, 2, irsc_valor)) "2 membre",
       sum(decode(irsc_membres, 3, irsc_valor)) "3 membre",
       sum(decode(irsc_membres, 4, irsc_valor)) "4 membre"
from   sample_data
group by irsc_zona
order by irsc_zona;

IRSC_ZONA   1 membre   2 membre   3 membre   4 membre
--------- ---------- ---------- ---------- ----------
A            2080.46    2144.81    2237.06    2311.62
B            1950.43    2010.76    2097.24    2167.14
C             1835.7    1892.48    1973.87    2039.66
D            1560.35    1608.61    1677.79    1733.72

N.B。您会注意到我改用 decode 语句,我这样做的主要原因是它使查询更具可读性,因为它占用的空间更少 space。我还使用 SUM 作为聚合函数,以防每个区域和成员可以有多行。