我有这样的SQL:
SELECT
TO_CHAR(dateinvoiced, 'YYYY') AS year,
TO_CHAR(dateinvoiced, 'MM') AS month,
name,
SUM(reste) OVER (PARTITION BY name, ad_org_id) AS tot_reste_client,
nameregion AS region
FROM
table
GROUP BY
TO_CHAR(dateinvoiced, 'YYYY'),
TO_CHAR(dateinvoiced, 'MM'),
name,
nameregion
ORDER BY name;
我试着把它放在GROUP BY子句中,我得到这样的错误"不是组功能",尝试使用HAVING并告诉我"这里不允许使用窗口函数&# 34。
无法找到解决方案?我正在使用Oracle 12。
答案 0 :(得分:2)
分析函数在 GROUP BY / HAVING之后计算,因此通常可以将聚合添加到reste
:
SELECT
TO_CHAR(dateinvoiced, 'YYYY') AS year,
TO_CHAR(dateinvoiced, 'MM') AS month,
name,
SUM(SUM(reste)) OVER (PARTITION BY name, ad_org_id) AS tot_reste_client,
nameregion AS region
FROM
table
GROUP BY
TO_CHAR(dateinvoiced, 'YYYY'),
TO_CHAR(dateinvoiced, 'MM'),
name,
nameregion
ORDER BY name;
但是由于ad_org_id
而不是GROUP BY,这也应该失败,也许你可以使用MIN(ad_org_id)
。