2016-11-16 8 views
5

मैं आईडी में आधारित कुछ फ़ील्ड में शामिल होने और एकत्र करने से एक टेबल बनाने की कोशिश कर रहा हूं। यह हिस्सा बहुत अच्छा काम कर रहा है। मैं एक अतिरिक्त कॉलम जोड़ने और एक ऐसे मामले का उपयोग करने का भी प्रयास कर रहा हूं जब मैं इसे बताना चाहता हूं। कीवर्ड त्रुटि लापता:CASE के बाद समूह

यहाँ स्क्रिप्ट

CREATE TABLE TABLE1 
AS 
    SELECT ID, IDC, SUM(AMOUNT) PRICE, SUM(COST) COST, SUM(AMOUNT-COST) PROFIT, 
    CASE PROFIT 
    WHEN PROFIT < 1000 THEN 'Low' 
    WHEN PROFIT < 5000 THEN 'Medium' 
    ELSE 'High' 
    END AS PROFITLEVEL 
    FROM 
    (SELECT DISTINCT ID, IDC, AMOUNT, COST 
    FROM ORDER_ITEMS 
    LEFT JOIN ORDERS 
    ON ID = IDC) 
    GROUP BY ID, IDC; 

हालांकि यह एक ORA-00905 रिटर्न है।

किसी भी मदद

+3

अमान्य केस वाक्यविन्यास। (दूसरों के बीच ...) 'मामला करो जब ...'। लेकिन आप वैसे भी उस कॉलम उपनाम PROFIT का उपयोग नहीं कर सकते हैं ... – jarlh

+0

डुफस के लिए प्रश्न जो इसे "टाइपो या किसी समस्या के कारण पुन: उत्पन्न नहीं किया जा सकता" के रूप में बंद करने के लिए चिह्नित किया गया है - क्या टाइपो? समस्या को पुन: उत्पन्न नहीं किया जा सकता है? (बस दुनिया से पूछना, क्योंकि उस डफस को बंद करने के लिए प्रश्न को चिह्नित करने की याद रखने की संभावना बहुत कम है।) – mathguy

उत्तर

5

आप एक गलत तरीके से CASE उपयोग कर रहे हैं की सराहना की होगी; इसके अलावा, आप उसी स्तर पर उपनाम PROFIT का उपयोग करने का प्रयास करते हैं जिसे आप परिभाषित करते हैं।

आप CASE को संपादित करने और अभिव्यक्ति है कि उर्फ ​​PROFIT के बजाय PROFIT देता है उपयोग करने की आवश्यकता:

CREATE TABLE TABLE1 AS 
     SELECT ID, 
      IDC, 
      SUM(AMOUNT) PRICE, 
      SUM(COST) COST, 
      SUM(AMOUNT - COST) PROFIT, 
      CASE 
       WHEN SUM(AMOUNT - COST) < 1000 THEN 'Low' 
       WHEN SUM(AMOUNT - COST) < 5000 THEN 'Medium' 
       ELSE 'High' 
      END AS PROFITLEVEL 
     FROM (SELECT DISTINCT ID, 
           IDC, 
           AMOUNT, 
           COST 
       FROM ORDER_ITEMS LEFT JOIN ORDERS ON ID = IDC) 
    GROUP BY ID, IDC; 

जिस तरह से आप का उपयोग करने के CASE आप एकल मूल्यों की जाँच करने की आवश्यकता है उपयोगी है की कोशिश की, उदाहरण के लिए:

select level, 
     case level 
     when 1 then 'one' 
     when 2 then 'two' 
     else 'other' 
     end 
from dual 
connect by level <=3 
+0

यह काम करता है। मुझे नहीं पता था कि मैं उसी स्तर पर उपनाम का उपयोग नहीं कर सकता हूं जिसे मैं परिभाषित करता हूं। लेकिन मुझे समझ में नहीं आता कि 'केस कब' और 'केस लाभ कब' के बीच क्या अंतर है? – Akaitenshi

+0

बस मुझे एक छोटा सा उदाहरण जोड़ा गया – Aleksej

+0

ओह मुझे मिलता है। सहायता के लिए धन्यवाद – Akaitenshi

संबंधित मुद्दे