2017-07-17 4 views
0

Ich habe Table_A wie dies unterWie String in eine Zahl in Oracle Concat

SALDO_AWAL_TAHUN YTD_AMOUNT_JAN YTD_AMOUNT_FEB YTD_AMOUNT_MAR BRANCH_ID 
100    200    300    400    001a 

YTD_AMOUNT_JAN bedeutet Menge von Januar YTD_AMOUNT_FEB bedeutet Menge Februar usw. Was ich will, ist, ich auf der Grundlage des Monats wählen machen .Ich mache schon Funktion, um einen Monat als Parameter zu definieren.

FUNCTION GET_MONTH_NAME (P_MONTH INT) 
     RETURN VARCHAR 
    IS 
     V_RESULT VARCHAR (20); 
    BEGIN 
     SELECT CASE 
        WHEN P_MONTH = 1 THEN 'JAN' 
        WHEN P_MONTH = 2 THEN 'FEB' 
        WHEN P_MONTH = 3 THEN 'MAR' 
        WHEN P_MONTH = 4 THEN 'APR' 
        WHEN P_MONTH = 5 THEN 'MAY' 
        WHEN P_MONTH = 6 THEN 'JUN' 
        WHEN P_MONTH = 7 THEN 'JUL' 
        WHEN P_MONTH = 8 THEN 'AUG' 
        WHEN P_MONTH = 9 THEN 'SEP' 
        WHEN P_MONTH = 10 THEN 'OCT' 
        WHEN P_MONTH = 11 THEN 'NOV' 
        ELSE 'DEC' 
       END 
     INTO V_RESULT 
     FROM DUAL; 


     RETURN V_RESULT; 
    END; 

Von der Funktion, die ich gemacht habe. zum Beispiel habe ich MAR (march) as V_MONTH, dann will ich String concat 'YTD_AMOUNT_' + MAR (die ich von der Funktion bekam) in meiner SELECT-Abfrage wie folgt aus:

SELECT SUM(NVL (SALDO_AWAL_TAHUN, 0) + (NVL ('YTD_AMOUNT_' 
    || GET_MONTH_NAME (3), 0))) AS value 
FROM Table_A 

ich das Ergebnis will sein wird:

500 (SALDO_AWAL_TAHUN + YTD_AMOUNT_MAR ) 

Aber Es zeigte mir "Ungültige Nummer" Ich suche so viel über meinen Fall in Google, aber ich bin immer noch nicht finden

+0

Können Sie an einem Beispiel erklären und eine Beispielausgabe? –

+0

Bitte Code der Funktion, Tabellenstruktur, einige Beispieldaten und Ausgaben, die Sie erwarten, hinzufügen. –

+0

Ich habe schon ein Update auf meine Fragen gemacht. Bitte lassen Sie mich wissen, wenn Sie weitere Details benötigen –

Antwort

1

Unpivot die Spalten mit Daten pro Monat

select t.*, substr(t.mon, 12, 3) as m 
from table_a unpivot(val for mon in("YTD_AMOUNT_JAN", 
            "YTD_AMOUNT_FEB", 
            "YTD_AMOUNT_MAR")) t 
/* result: 

SALDO_AWAL_TAHUN BRANCH_ID MON    VAL M 
100    001a  YTD_AMOUNT_JAN 200 JAN 
100    001a  YTD_AMOUNT_FEB 300 FEB 
100    001a  YTD_AMOUNT_MAR 400 MAR 

*/ 

Jetzt können Sie bequem die gewünschten Daten auswählen:

select res 
    from (select substr(t.mon, 12, 3) as m, 
       t.saldo_awal_tahun + val as res 
      from (select * 
        from table_a unpivot(val for mon in("YTD_AMOUNT_JAN", 
                 "YTD_AMOUNT_FEB", 
                 "YTD_AMOUNT_MAR"))) t) 
where m = GET_MONTH_NAME(2); 
+0

Vielen Dank ..: D –

0

Sie müssen den Funktionsnamen verwenden und übergeben Sie die Variable wie folgt:

SELECT NVL (SALDO_AWAL_TAHUN, 0) + NVL ('YTD_AMOUNT_' || GET_MONTH_NAME (3), 0) AS-Wert aus Tabelle_A;

+0

immer noch die gleichen geben Sie mir Fehler "ungültige Nummer" –