2016-05-01 7 views
5

मैं वर्तमान में निम्न पंक्ति क्वेरी का उपयोग कर रहा हूं जो 25 पंक्तियों को वापस कर रहा है। मैं कैसे पहली पंक्ति की अनदेखी करने के इसे संशोधित कर सकते हैं:सभी पंक्तियों का चयन करें और पहली पंक्ति को अनदेखा करें

SELECT fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales)) 
OVER() as avg_sum 
FROM sales_report 
GROUP BY fiscal_year 
ORDER BY fiscal_year ASC 

मैं एसक्यूएल सर्वर का उपयोग कर रहा 2008

धन्यवाद।

+0

मैं सीमा पर विश्वास नहीं करते और OFFSET एसक्यूएल सर्वर 2008 में उपलब्ध हैं आप शायद (ROW_NUMBER के कुछ प्रकार का उपयोग करने की आवश्यकता होगी) (छोड़कर जहां यह 1 के बराबर होती है) । – ZLK

+2

... _Why_ क्या आप पहली पंक्ति को अनदेखा करना चाहते हैं? उस वित्तीय वर्ष को 'WHERE' क्लॉज के साथ क्यों न छोड़ें? ध्यान दें कि 'AVG' चलाने के बाद इसे छोड़कर (ऑफसेट' या विंडो फ़ंक्शन का उपयोग करने के साथ) औसत 'गलत' बना देगा - आप उस संख्या को जोड़ देंगे जो उपयोगकर्ता को दिखाई नहीं दे रहा है। –

उत्तर

3

आप EXCEPT एसक्यूएल सर्वर 2008.

SELECT fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales)) 
OVER() as avg_sum 
FROM sales_report 
GROUP BY fiscal_year 

EXCEPT 

SELECT TOP 1 fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales)) 
OVER() as avg_sum 
FROM sales_report 
GROUP BY fiscal_year 
ORDER BY fiscal_year ASC 

में यह मानते हुए ठीक है आप इसे कैसे क्वेरी चाहते हैं, तो उपयोग कर सकते हैं एसक्यूएल सर्वर 2012 और इसके बाद के संस्करण के लिए, आप FETCH OFFSET

0

उपयोग कर सकते हैं: SELECT fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales)) OVER() as avg_sum FROM sales_report WHERE fiscal year <> (SELECT MIN(Fiscal_year) FROM sales_report)) GROUP BY fiscal_year ORDER BY fiscal_year ASC

और फिर आप "ऑर्डर बाय" को हटा सकते हैं। सभी संस्करणों

+0

... यह शायद बेहतर विकल्प है, लेकिन यह अन्य उत्तरों की तुलना में अपना आउटपुट बदल देगा, क्योंकि चलने वाला औसत बदल जाएगा। इसके अलावा, नहीं, आप (शायद) 'ORDER BY' को नहीं हटा सकते हैं - यदि ओपी उन्हें एक विशिष्ट क्रम में चाहे (चाहे 'पहले' को हटाने के बावजूद), उसे खंड की आवश्यकता है। –

0

पर
वर्क्स आप ROW_NUMBER खिड़की समारोह का उपयोग कर सकते

;with cte as 
(
SELECT Row_number()over(order by fiscal_year) as RN,fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales)) 
OVER() as avg_sum 
FROM sales_report 
GROUP BY fiscal_year 
) 
select * 
From cte 
Where RN <> 1 
ORDER BY fiscal_year ASC 
0

आशा यह सही है। यह वही है मैं इसे करने की कोशिश की है:

SELECT fiscal_year 
    ,a.sum_of_year 
    ,AVG(SUM(a.sum_of_year)) OVER() AS avg_sum 
FROM (
    SELECT Row_number() OVER (
      ORDER BY fiscal_year 
      ) AS RN 
     ,fiscal_year 
     ,SUM(total_sales) AS sum_of_year 
    FROM test_fiscal 
    GROUP BY fiscal_year 
    ) a 
WHERE a.rN > 1 
GROUP BY fiscal_year 
    ,rn 
    ,a.sum_of_year 
ORDER BY fiscal_year ASC 
संबंधित मुद्दे