2011-08-19 13 views
27

चयन युक्त डालने में उपयोग अनुक्रम असल में मैं निम्न क्वेरी चलाना चाहते हैं:Oracle SQL: वक्तव्य

INSERT INTO historical_car_stats (historical_car_stats_id, year, month, make, model, region, avg_msrp, count) 
    SELECT 
    my_seq.nextval, 
    '2010', 
    '12', 
    'ALL', 
    'ALL', 
    region, 
    sum(avg_msrp * count)/sum(count), 
    sum(count) 
    FROM historical_car_stats 
    WHERE year = '2010' 
     AND month = '12' 
     AND make != 'ALL' 
    GROUP BY region; 

क्योंकि "क्रम संख्या यहाँ की अनुमति नहीं" एसक्यूएल त्रुटि यह काम नहीं करता। मैं इसे कैसे लिख सकता हूं ताकि ओरेकल मुझे वह करने दे जो मैं करना चाहता हूं?

उत्तर

51

यह मानते हुए कि आप समूह डेटा करना चाहते हैं इससे पहले कि आप अनुक्रम के साथ कुंजी उत्पन्न, यह लग रहा है कि आप की तरह

INSERT INTO HISTORICAL_CAR_STATS (
    HISTORICAL_CAR_STATS_ID, 
    YEAR, 
    MONTH, 
    MAKE, 
    MODEL, 
    REGION, 
    AVG_MSRP, 
    CNT) 
SELECT MY_SEQ.nextval, 
     year, 
     month, 
     make, 
     model, 
     region, 
     avg_msrp, 
     cnt 
    FROM (SELECT '2010' year, 
       '12' month, 
       'ALL' make, 
       'ALL' model, 
       REGION, 
       sum(AVG_MSRP*COUNT)/sum(COUNT) avg_msrp, 
       sum(cnt) cnt 
      FROM HISTORICAL_CAR_STATS 
     WHERE YEAR = '2010' 
      AND MONTH = '12' 
      AND MAKE != 'ALL' 
     GROUP BY REGION) 
+0

यदि तालिका के बीच में अनुक्रम कॉलम दिखाई देने की आवश्यकता है तो क्या होगा। – atom

+0

ऐसा लगता है कि नियम यह है कि बाहरीतम चयन में कोई "कहां" नहीं हो सकता है। – Dariusz

4

मैं परीक्षण किया है और स्क्रिप्ट की तरह कुछ ठीक चलाने चाहते हैं!

INSERT INTO HISTORICAL_CAR_STATS (HISTORICAL_CAR_STATS_ID, YEAR,MONTH,MAKE,MODEL,REGION,AVG_MSRP,COUNT) 
WITH DATA IS 
(
    SELECT '2010' YEAR,'12' MONTH ,'ALL' MAKE,'ALL' MODEL,REGION,sum(AVG_MSRP*COUNT)/sum(COUNT) AVG_MSRP,sum(Count) COUNT 
    FROM HISTORICAL_CAR_STATS 
    WHERE YEAR = '2010' AND MONTH = '12' 
    AND MAKE != 'ALL' GROUP BY REGION 
) 
SELECT MY_SEQ.nextval, YEAR,MONTH,MAKE,MODEL,REGION,AVG_MSRP,COUNT 
FROM DATA; 

आप और अधिक समझने के लिए इस आलेख को पढ़ सकते हैं! http://www.orafaq.com/wiki/ORA-02287

+2

यह काम करता है। हालांकि आपको एक छोटी सी त्रुटि है। जहां यह 'डेटा के साथ है' पढ़ता है, यह 'डेटा एएस के साथ' होना चाहिए। – Fred