SQL Abfrage: Wenn etwas zutrifft, fülle Zelle

Funky

Benutzer
Beiträge
5
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?
 
Werbung:
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.


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)
 
Werbung:
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.
 
Zurück
Oben