एक आसान उपाय है:
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 या इतने साल पहले बहुत अच्छी तरह से याद किया था, लेकिन मुझे वह विशेष सीमा याद नहीं है।
मुझे ध्यान देना चाहिए:
- एसक्यूएल 92 मानक के समय, पार्श्व जोड़ वास्तव में रडार पर नहीं थे। Sybase के पास निश्चित रूप से ऐसी कोई अवधारणा नहीं थी।
- अन्य डेटाबेस करते हैं बाहरी संदर्भों के साथ समस्याएं हैं। विशेष रूप से, वे अक्सर दायरे को एक स्तर तक सीमित कर देते हैं।
- एसक्यूएल मानक स्वयं वास्तविक डेटाबेस उपयोगकर्ता आवश्यकताओं द्वारा संचालित होने के बजाय अत्यधिक राजनीतिक (अर्थात, विक्रेता द्वारा संचालित) होता है। खैर, समय के साथ, यह सही दिशा में आगे बढ़ता है।