tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
366
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    BaseBallBatBoy BaseBallBatBoy ist offline Mitglied Silber
    Registriert seit
    Feb 2007
    Beiträge
    75
    Hallo!

    Ich habe eine externe Tabelle:
    rownumber, cola,colb, colc, cold, cole, colf, ......, colz
    Sind alles varchar2 (255).

    Die externe Tabelle zeigt auf ein CSV File und rownumber gibt den Zeilenindex im CSV file an.

    Nun weiss ich, dass where rownumber=3 habe ich ab cole immer eine Stringkombination aus Monat und Jahr. Das habe ich solange bis da Total steht, dann ist fertig.

    Hier ein Beispiel:

    cole, colf, colg, colh
    jan -11, feb -11, mar -11, Total

    Ich möchte nun erkennen welche Spalten mich zu interessieren haben (in diesem beispiel cole, colf, colg) und dann möchte ich das nummernformat yyyymm haben. (also jan -11 -> 201101).

    Wie gehe ich sowas am besten an?
    Regex, mapping Tabelle, cases, ....

    Danke für eure Hinweise & Gruss
    BBBB
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Huh, eine komplizierte Beschreibung die ich auch nach 3maligem Durchlesen noch ncith wirklich verstanden habe.

    Also, so wie ich das verstehe, ergibt das eine Tabelle im Format
    Code :
    1
    2
    3
    
    cole    | colf    | colg    | colh
    --------|---------|----------------
    jan -11 | feb -11 | mar -11 | Total

    Dich interessieren jetzt die Resultate cole bis colh. Wie soll das AUsgegeben werden? Am besten zuerst alles Untereinander setzen und dann filtern

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    
    -- Stelle sicher dass das englische Datumsformat eingestellt ist. Nur so wird aus 'mar' auch 03
    ALTER SESSION SET NLS_DATE_LANGUAGE = 'ENGLISH';
    WITH 
    --simuliere die Daten
    mydata AS
    (
      SELECT 3 AS rownumber, 'test 3' AS cola, 'jan -11' AS cole, 'mar -11' AS colf, 'feb -11' AS colg, 'Total' AS colh, '' AS coli FROM dual
      UNION ALL
      SELECT 4 AS rownumber, 'test 4' AS cola, 'feb -11' AS cole, 'mar -11' AS colf, 'Total' AS colg, '' AS colh, '' AS coli FROM dual
    )
    -- Das eigebtliche Query
    SELECT 
      rownumber, 
      cola, 
      --  'jan -11' zuerst in ein Datum wandeln und dieses dann wieder in einen Text: '201101'
      TO_CHAR(TO_DATE(col_value, 'MON -YY'), 'YYYYMM') AS my_date, 
      col_name
    FROM 
      (
        SELECT 
          rownumber, 
          cola,
          col_value, 
          col_name
        FROM 
          -- Schreibe das Format um
          (
            -- cole
            SELECT rownumber, cola, cole AS col_value, 'cole' AS col_name
            FROM mydata
            -- colf
            UNION ALL
            SELECT rownumber, cola, colf AS col_value, 'colf' AS col_name
            FROM mydata
            -- colg
            UNION ALL
            SELECT rownumber, cola, colg AS col_value, 'colg' AS col_name
            FROM mydata
            -- colh
            UNION ALL
            SELECT rownumber, cola, colh AS col_value, 'colh' AS col_name
            FROM mydata
            -- coli
            UNION ALL
            SELECT rownumber, cola, coli AS col_value, 'coli' AS col_name
            FROM mydata
            ORDER BY rownumber, col_name
          ) tab
        WHERE
          -- Alle Null und Totals ausfiltern
          NOT NVL(col_value, 'Total') = 'Total'
      ) uniondataM
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Zvoni Zvoni ist offline Mitglied Platin
    Registriert seit
    Jul 2008
    Ort
    Hinter dem Mond gleich links
    Beiträge
    735
    Also wenn ich ihn richtig verstanden habe, will er per Abfrage herausfinden, in welcher Spalte das "Total" steht, und als Ergebnis will er dann eben Spalte 5 bis SpalteMitTotal-1 haben, welches dann umformatiert dargestellt werden soll.

    Die Frage, die sich mir jetzt stellt, ist das nur für Zeile 3, oder für alle Zeilen in dem CSV?
     
    Zwei Dinge sind unendlich: Die menschliche Dummheit und das Universum, nur bei letzterem bin ich mir noch nicht sicher. - Albert Einstein

    Code vb:
    1
    
    If Beitrag.Hilfreich=True Then Bewertung.Send("Positiv")

  4. #4
    BaseBallBatBoy BaseBallBatBoy ist offline Mitglied Silber
    Registriert seit
    Feb 2007
    Beiträge
    75
    @yaslaw
    das macht schon ziemlich genau was ich mir so vorgestellt habe. vielen dank. ich werde versuchen das ganze noch generisch zu gestalten, also so, dass das select col nur einmal geschrieben werden muss und per for loop für jede spalte ausgeführt wird. ich melde mich nochmals falls ich das dann habe.

    @zvoni
    genau, das ist was ich wollte und das liefert der code vom kollegen ja bereits. ja das soll nur für zeile 3 des csv gemacht werden. info: das csv ist eigentlich ein excel, das konvertiert wurde. und es einthält in einer header row (=3) eben die jahres monats zahlen.
     

Ähnliche Themen

  1. [Oracle] Sammlung interessanter Oracle Blogs
    Von Thomas Darimont im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 16.02.10, 12:34
  2. [Oracle 8i] An Oracle 8i über Vb und ODBC anmelden/DB bearbeiten
    Von Animal21 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.06.08, 11:00
  3. [Oracle] Sehr viele interessante Präsentationen zum Thema Oracle und Sicherheit
    Von Thomas Darimont im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 24.01.07, 19:02
  4. [Oracle] - Suche Forum was unter Oracle funktioniert.
    Von PuN1sher im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 11.04.06, 13:53
  5. [Oracle] Genaue Version des Oracle Servers ermitteln
    Von Thomas Darimont im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 25.01.05, 20:42