Registriert seit: 27. Nov 2017
2.490 Beiträge
Delphi 7 Professional
|
AW: Mehrfach Update STatement
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-0' and oaagnr =10) then 1
when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =10) then 2
when (concat(waaunr,'-',waaupo) ='408218-0' and oaagnr =10) then 3
else 0
end,
frozen = case
when (concat(waaunr,'-',waaupo) ='408216-0' and oaagnr =10) then 1
when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =10) then 1
when (concat(waaunr,'-',waaupo) ='408218-0' and oaagnr =10) then 0
else 0
end,
plan_date = case
when (concat(waaunr,'-',waaupo) ='408216-0' and oaagnr =10) then '2019-07-05'
when (concat(waaunr,'-',waaupo) ='408217-0' and oaagnr =10) then '2019-07-05'
when (concat(waaunr,'-',waaupo) ='408218-0' and 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 = '408216' and waaupo = 0 and oaagnr = 10 then 1
when waaunr = '408217' and waaupo = 0 and oaagnr = 10 then 2
when waaunr = '408218' and waaupo = 0 and oaagnr = 10 then 3
else 0
end,
frozen = case
when waaunr = '408216' and waaupo = 0 and oaagnr = 10 then 1
when waaunr = '408217' and waaupo = 0 and oaagnr = 10 then 1
when waaunr = '408218' and waaupo = 0 and oaagnr = 10 then 0
else 0
end,
plan_date = case
when waaunr = '408216' and waaupo = 0 and oaagnr = 10 then '2019-07-05'
when waaunr = '408217' and waaupo = 0 and oaagnr = 10 then '2019-07-05'
when waaunr = '408217' and 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.
|