1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SQL Abfrage: Wenn etwas zutrifft, fülle Zelle

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von Funky, 20 Mai 2020.

  1. Funky

    Funky Neuer Benutzer

    Guten Morgen zusammen,

    ich benutze einen IBM Informix Server 12.10.
    Dort scheitere ich gerade bei der Umsetzung einer Abfrage.

    Derzeitiger SQL:

    drop table tt_vsgg;

    select pool_teile.prod_term,
    pool_teile.auftnr,
    pool_teile.pos,
    pool_teile.artnr,
    pool_teile.glasart_bez,
    round((pool_teile.breite/1000),0) as breite,
    round((pool_teile.hoehe/1000),0) as hoehe,
    round((pool_teile.dicke/1000),0) as dicke,
    round(((round((pool_teile.breite/1000),0)*(round((pool_teile.hoehe/1000),0)))*pool_teile.menge)/1000000,2) as qm,
    pool_teile.menge,
    pool_teile.modell_flag,
    pool_teile.modell_gruppe,
    round(((pool_teile.gewicht_rechteck/1000) * pool_teile.menge),2) as gewicht,
    round((pool_teile.gewicht_form/1000),2) as gewicht_form,
    pool_teile.lauf
    from pool_teile, pool_bearbeit
    where pool_teile.auftnr = pool_bearbeit.auftnr
    AND pool_teile.pos = pool_bearbeit.pos
    AND pool_teile.u_pos = pool_bearbeit.u_pos
    AND pool_bearbeit.mzo_id_phys in (150,160,170,180)
    AND pool_teile.teile_nr = pool_bearbeit.teile_nr
    AND pool_teile.prod_term >= DATE (TODAY) into tt_vsgg;



    Nun habe ich aber die Anforderung, dass wenn eine Breite oder eine Höhe Größer als 4000 ist, die Anzahl (pool_teile.menge) in einen Extra Feld geschrieben wird.

    Einzeln hätte ich einfach
    AND (pool_teile.breite > 4000000 or pool_teile.hoehe > 4000000)
    Hinzugefügt. So erreiche ich das aber nur über 2 Tabellen.

    Am liebsten wäre es mir,wenn ich in der Temporären Tabelle ein Extra Feld Übermass mit erstelle und jedes Mal wenn die Breite oder Höhe über 4000 (4000000) ist die pool_teile.menge dort eingetragen wird.

    Hatte auch erst überlegt, einmal zu sagen, alles was unter 4000 in einer Tabelle zu schreiben und alles was größer ist als 4000 und diese dann zusammen zu führen. Aber weil ja das ODER mit dabei ist, bekomme ich das darüber auch nicht gelöst.

    Hat hier jemand einen Ansatz / Idee oder Lösung für mich?
     
  2. akretschmer

    akretschmer Datenbank-Guru


    case when ... ist Dein Freund, kann bestimmt auch Informix:

    Code:
    test=*# create table funky (id int generated always as identity, i int);
    CREATE TABLE
    test=*# copy funky (i) from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself, or an EOF signal.
    >> 2   
    >> 4
    >> 6
    >> 8
    >> 10
    >> \.
    COPY 5
    test=*# select id, i, case when i > 5 then 'größer' else 'kleiner' end as neues_feld from funky;
     id | i  | neues_feld
    ----+----+------------
      1 |  2 | kleiner
      2 |  4 | kleiner
      3 |  6 | größer
      4 |  8 | größer
      5 | 10 | größer
    (5 rows)
    
     
    Funky gefällt das.
  3. Funky

    Funky Neuer Benutzer

    Vielen Dank akretschmer.

    Ich werde mich Mal gleich daran versuchen.
     
  4. Funky

    Funky Neuer Benutzer

    Mahlzeit,

    wollte mich nochmal bedanken und den fertig SQL einmal zeigen.

    drop table tt_vsgg;

    select pool_teile.prod_term,
    pool_teile.auftnr,
    pool_teile.pos,
    pool_teile.artnr,
    pool_teile.glasart_bez,
    round((pool_teile.breite/1000),0) as breite,
    round((pool_teile.hoehe/1000),0) as hoehe,
    round((pool_teile.dicke/1000),0) as dicke,
    round(((round((pool_teile.breite/1000),0)*(round((pool_teile.hoehe/1000),0)))*pool_teile.menge)/1000000,2) as qm,
    pool_teile.menge,
    pool_teile.modell_flag,
    pool_teile.modell_gruppe,
    round(((pool_teile.gewicht_rechteck/1000) * pool_teile.menge),2) as gewicht,
    round((pool_teile.gewicht_form/1000),2) as gewicht_form
    from pool_teile, pool_bearbeit
    where pool_teile.auftnr = pool_bearbeit.auftnr
    AND pool_teile.pos = pool_bearbeit.pos
    AND pool_teile.u_pos = pool_bearbeit.u_pos
    AND pool_bearbeit.mzo_id_phys in (150,160,170,180)
    AND pool_teile.teile_nr = pool_bearbeit.teile_nr
    AND pool_teile.prod_term >= DATE (TODAY) into tt_vsgg;

    select prod_term, auftnr, pos, artnr, glasart_bez, breite, hoehe, dicke, qm, menge, modell_flag, modell_gruppe, gewicht, gewicht_form,
    CASE
    WHEN breite > '4000' or hoehe > '4000'
    THEN menge
    END
    as ubermass
    from tt_vsgg;


    Vielen Dank nochmals.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden