[MSSQL] Modyfikowanie pola otrzymanego z case when

0

Cześć, mam 2 tabele:

users

ID
GID <-- ID z tabeli groups lub null
name
wStart
wEnd

groups

ID
name
wStart
wEnd

To są użytkownicy(users) i grupy(groups). Chodzi o to, że użytkownik może należeć do grupy, ale nie musi. Jeśli nie należy to w polu GID jest NULL

Zrobiłem sobie widok, który pobiera mi dane:

SELECT  u.ID, u.name, u.GID, 
           (CASE WHEN u.gid IS NULL THEN u.wStart ELSE g.wStart END) AS wStart, 
           (CASE WHEN u.gid IS NULL THEN u.wEnd ELSE g.wEnd END) AS wEnd, 
           (CASE WHEN u.gid IS NULL THEN 'brak grupy' ELSE g.name END) AS gName
FROM  users AS u 
LEFT JOIN groups AS g ON u.GID = g.ID

Zasada jest taka. Jeśli użytkownik jest przypisany do grupy, to wtedy pole wStart(wEnd) jest brane z tabeli groups. Jeśli użytkownik nie jest przypisany do grupy, to wtedy pole wStart(wEnd) jest brane z tabeli users.

Pytanie moje takie.
Robię to w Delphi za pomocą ADO.

Czy da się zrobić jakoś modyfikację pola wStart?

Bo jeśli robię

  ADOQuery.Edit;
  ADOQuery.FieldByName('wStart').asDateTime:=cos_tam;
  ADOQuery.Post;

Dostaję błąd, że pole wStart nie może być modyfikowane.
Czy da się jakoś tak to zrobić, czy tylko sql mnie ratuje?

0

obejść to można tak:

  1. pobierasz u.ID
  2. robisz update gdzie u.ID i te warunki z Twojego selecta (users czy groups)
  3. najlepiej napisać "store proc" jeżeli używasz MSSQL'a

pozdrawiam melu

0

a skąd niby ado ma wiedzieć z której tabeli jest dane pole

1 użytkowników online, w tym zalogowanych: 0, gości: 1