より簡単な解決策があります:
SELECT c.Customer, c."User", c."Revenue",
1.0 * Revenue/ NULLIF(c2.sum_total, 0) AS percentage,
1.0 * c2.sum_running / NULLIF(c2.sum_total, 0) AS running_percentage
FROM t c CROSS APPLY
(SELECT SUM(c2.Revenue) AS sum_total,
SUM(CASE WHEN c2.Revenue >= x.Revenue THEN c2.Revenue ELSE 0 END)
as sum_running
FROM t c2 CROSS JOIN
(SELECT c.REVENUE) x
WHERE c."User" = c2."User"
) c2
ORDER BY "User", Revenue DESC;
この制限がSQL'92標準にある理由、またはそのかどうかはわかりません。 20年ほど前にかなりよく覚えていましたが、その特定の制限を思い出せません。
注意する必要があります:
- SQL 92標準の時点では、横方向の結合は実際には注目されていませんでした。 Sybaseには確かにそのような概念はありませんでした。
- 他のデータベースは 外部参照に問題があります。特に、スコープを1レベルの深さに制限することがよくあります。
- SQL標準自体は、実際のデータベースユーザーの要件ではなく、非常に政治的(つまり、ベンダー主導)になる傾向があります。まあ、時間の経過とともに、それは正しい方向に動きます。