El error está dado por el DBMS que estás usando.
Motores como Oracle, SQL Server, DB2, etc., exigen que todos los campos declarados en el SELECT
y que no estén siendo usados con funciones agregadas, deben estar forzosamente en el GROUP BY.
En tu caso:
Código SQL:
Ver originalSELECT
O.nom_curso,
O.nom_cliente,
O.codigo,
O.provincia_curso,
O.fecha_inicio_curso,
O.fecha_fin_curso,
G.tipo,
G.concepto,
G.fecha,
SUM(G.cantidad) AS SumaDecantidad
FROM Ofertas_Cursos O
LEFT JOIN gastos_curso G ON O.codigo = G.codigo
GROUP BY G.tipo;
Como puedes apreciar, estas poniendo sólo el tipo de gasto, cuando en realidad debería ir:
Código SQL:
Ver originalSELECT
O.nom_curso,
O.nom_cliente,
O.codigo,
O.provincia_curso,
O.fecha_inicio_curso,
O.fecha_fin_curso,
G.tipo,
G.concepto,
G.fecha,
SUM(G.cantidad) AS SumaDecantidad
FROM Ofertas_Cursos O
LEFT JOIN gastos_curso G ON O.codigo = G.codigo
GROUP BY
G.tipo, O.nom_curso, O.nom_cliente,
O.codigo, O.provincia_curso, O.fecha_inicio_curso,
O.fecha_fin_curso, G.concepto, G.fecha;
La sentencia, tal como la planteas, es válida en MySQL, SQLite, y no sé si en Postgre, pero no en los otros mencionados.
No son errores precisamente, sino es la forma que los DBMS implementan SQL.