我有以下查询
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
我不知道如何重构我的查询以获得预期的结果。
希望我的问题很明确。 如果没有,请告诉我如何提供更多细节。
提前致谢,
答案 0 :(得分:0)
您忘记在案例陈述中添加聚合函数。
以下内容应该可以解决问题(显然,您可以使用实际查询代替我使用“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。你会注意到我切换到使用解码语句,我之所以这样做主要是因为它使查询更具可读性,因为它占用的空间更少。我还使用SUM作为聚合函数,以防每个zona和membres都有多行。