Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#27

AW: Mehrfach Update STatement

  Alt 8. Jul 2019, 13:25
Case when funktioniert auch ohne Else und zwar ohne Syntaxfehler. Welchen Syntaxfehler erhältst Du denn?

Was mir schleierhaft ist:
SQL-Code:
update as400 set
  sequence = case
      when (concat(waaunr,'-',waaupo) ='408216-0and oaagnr =10) then 1
      when (concat(waaunr,'-',waaupo) ='408217-0and oaagnr =10) then 2
      when (concat(waaunr,'-',waaupo) ='408218-0and oaagnr =10) then 3
      else 0
  end,
  frozen = case
      when (concat(waaunr,'-',waaupo) ='408216-0and oaagnr =10) then 1
      when (concat(waaunr,'-',waaupo) ='408217-0and oaagnr =10) then 1
      when (concat(waaunr,'-',waaupo) ='408218-0and oaagnr =10) then 0
      else 0
  end,
  plan_date = case
      when (concat(waaunr,'-',waaupo) ='408216-0and oaagnr =10) then '2019-07-05'
      when (concat(waaunr,'-',waaupo) ='408217-0and oaagnr =10) then '2019-07-05'
      when (concat(waaunr,'-',waaupo) ='408218-0and oaagnr =10) then '2019-07-06'
      else '000-00-00'
  end
where concat(waaunr,'-',waaupo,'-',oaagnr) in ('408216-0-10', '408217-0-10', '408218-0-10')
Im where setzt du 3 Werte per Concat zusammen, im When zwei und den dritten fügst Du per and hinzu.

Warum, wo ist da der sittliche Nährwert? Es sind doch letztlich die gleichen Wertkombinationen abzufragen.

So wäre es dann schon etwas konsequenter:
SQL-Code:
update as400 set
  sequence = case
      when (concat(waaunr,'-',waaupo,'-',oaagnr) = '408216-0-10') then 1
      when (concat(waaunr,'-',waaupo,'-',oaagnr) = '408217-0-10') then 2
      when (concat(waaunr,'-',waaupo,'-',oaagnr) = '408218-0-10') then 3
      else 0
  end,
  frozen = case
      when (concat(waaunr,'-',waaupo,'-',oaagnr) = '408216-0-10') then 1
      when (concat(waaunr,'-',waaupo,'-',oaagnr) = '408217-0-10') then 1
      when (concat(waaunr,'-',waaupo,'-',oaagnr) = '408218-0-10') then 0
      else 0
  end,
  plan_date = case
      when (concat(waaunr,'-',waaupo,'-',oaagnr) ='408216-0-10') then '2019-07-05'
      when (concat(waaunr,'-',waaupo,'-',oaagnr) ='408217-0-10') then '2019-07-05'
      when (concat(waaunr,'-',waaupo,'-',oaagnr) ='408218-0-10') then '2019-07-06'
      else '000-00-00'
  end
where concat(waaunr,'-',waaupo,'-',oaagnr) in ('408216-0-10', '408217-0-10', '408218-0-10')
Oder auch so:
SQL-Code:
update as400 set
  sequence = case
      when waaunr = '408216and waaupo = 0 and oaagnr = 10 then 1
      when waaunr = '408217and waaupo = 0 and oaagnr = 10 then 2
      when waaunr = '408218and waaupo = 0 and oaagnr = 10 then 3
      else 0
  end,
  frozen = case
      when waaunr = '408216and waaupo = 0 and oaagnr = 10 then 1
      when waaunr = '408217and waaupo = 0 and oaagnr = 10 then 1
      when waaunr = '408218and waaupo = 0 and oaagnr = 10 then 0
      else 0
  end,
  plan_date = case
      when waaunr = '408216and waaupo = 0 and oaagnr = 10 then '2019-07-05'
      when waaunr = '408217and waaupo = 0 and oaagnr = 10 then '2019-07-05'
      when waaunr = '408217and waaupo = 0 and oaagnr = 10 then '2019-07-06'
      else '0000-00-00'
  end
where waaunr in ('408216', '408217', '408218') and waaupo = 0 and oaagnr = 10
Die von Dir bisher gewählte Variante hätte ich früher höchstwahrscheinlich nicht durch den Test und die Qualitätssicherung bekommen, da bei ihr potenziell Datensätze geändert werden könnten, die nicht geändert werden dürfen. Und genau diese Fehlermöglichkeit war ja überhaupt erst der Grund, weshalb Du diesen Thread eröffnet hast.
  Mit Zitat antworten Zitat