Welcome to Sign in | Help
in Search

clauza where cu case sau if

Last post 08-16-2007, 2:17 PM by rsocol. 7 replies.
Sort Posts: Previous Next
  •  08-16-2007, 12:59 PM 2488

    clauza where cu case sau if

    am un select cu clauza where

    pot pune la clauza where case sau if

    adica vreau sa pun ceva de genul

    SELECT p.id, p.id AS masina_id, p.tip_masina, p.marca_model, f.id AS Expr1, f.id_masina, f.polita, f.data_asig,f.soc, f.data_exp, f.suma_asig, f.prima, f.val_casco, f.procent, f.desp_casco, f.RSA FROM tblMasina AS p left JOIN tblASIBAN AS f ON p.id = f.id_masina where case when (f.soc=0 ) then  f.soc=0  else f.soc=3 end

    primesc eroarea

    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near '='.

     Adica as vrea ca in clauza where sa aiba o conditie daca f.soc=0 si alta daca f.soc!=0

    Se poate,ceva sugestii? 

     

  •  08-16-2007, 1:21 PM 2489 in reply to 2488

    Re: clauza where cu case sau if

    Nu prea inteleg ce vrei. De exemplu, daca pui conditia "WHERE f.soc = 0" atunci setul de rezultate va contine toate inregistrarile pentru care valoarea campului "f.soc" este 0. Poti sa detaliezi cerinta?
  •  08-16-2007, 1:33 PM 2490 in reply to 2489

    Re: clauza where cu case sau if

    daca f.soc =0 vreau ca si conditia de where sa fie f.soc=0 sau f.soc is null

    si daca f.soc!=0 vreau ca sa fie f.soc=@soc,unde @soc e valoarea dintr-un combo filtru.

    Ma refeream la sintaxa corecta 

  •  08-16-2007, 1:38 PM 2491 in reply to 2488

    Re: clauza where cu case sau if

    Nu prea înţeleg ce ceri... poţi să faci:

    WHERE (CASE WHEN a=b THEN c ELSE d END)=e

    De exemplu, considerând tabela Employees din Northwind:

     

    EmployeeID LastName FirstName Title City
    1 Davolio Nancy Sales Representative Seattle
    2 Fuller Andrew Vice President, Sales Tacoma
    3 Leverling Janet Sales Representative Kirkland
    4 Peacock Margaret Sales Representative Redmond
    5 Buchanan Steven Sales Manager London
    6 Suyama Michael Sales Representative London
    7 King Robert Sales Representative London
    8 Callahan Laura Inside Sales Coordinator Seattle
    9 Dodsworth Anne Sales Representative London


    Să presupunem că vrei să selectezi cu condiţia ca City='London' dacă Title='Sales Representative', însă dacă e alt Title, vrei să pui condiţia City='Seattle', deci să selectezi rândurile care sunt scrise cu italic mai sus.

    În acest caz, NU poţi să scrii:

    WHERE CASE WHEN Title='Sales Representative' THEN City='London' ELSE City='Seattle' END

    Ci trebuie să spui:

    WHERE CASE WHEN Title='Sales Representative' THEN 'London' ELSE 'Seattle' END=City

    sau, mai clar:

    WHERE (Title='Sales Representative' AND City='London') OR (Title<>'Sales Representative' AND City='Seattle')

    (de fapt aici ar fi trebuit să scriem "ISNULL(Title,'')<>...", pt. ca expresia să fie echivalentă cu cea de mai sus, însă dacă presupunem că Title nu permite NULL-uri, nu ar fi nevoie)

    sau, mai complicat:

    WHERE CASE WHEN Title='Sales Representative'  THEN
      CASE WHEN City='London' THEN 1 ELSE 0 END
    ELSE
      CASE WHEN City='Seattle' THEN 1 ELSE 0 END
    END=1

    Răzvan

  •  08-16-2007, 1:41 PM 2492 in reply to 2490

    Re: clauza where cu case sau if

    Cred că ai exprimat greşit cerinţa atunci când ai scris: 

    Abadon83:

    daca f.soc =0 vreau ca si conditia de where sa fie f.soc=0 sau f.soc is null

    si daca f.soc!=0 vreau ca sa fie f.soc=@soc,unde @soc e valoarea dintr-un combo filtru.

    Cumva vroiai să scrii:

    daca @soc =0 vreau ca si conditia de where sa fie f.soc=0 sau f.soc is null

    si daca @soc!=0 vreau ca sa fie f.soc=@soc,unde @soc e valoarea dintr-un combo filtru.

    Răzvan

  •  08-16-2007, 1:41 PM 2493 in reply to 2491

    Re: clauza where cu case sau if

    mersi

    eu vroiam sa schimbam conditia de la clauza where in fct de valoarea campului soc.

    da am rezolvat asa

    (f.soc=0  or f.soc is null and @soc=0) or (f.soc=@soc and @soc!=0 and f.soc is not null )" 

  •  08-16-2007, 1:49 PM 2494 in reply to 2493

    Re: clauza where cu case sau if

    Dacă cerinţa era cea scrisă de mine în al doilea mesaj (adică schimbarea e în funcţie de valoarea parametrului, nu în funcţie de valoarea câmpului), atunci cred că rezolvarea ta nu este bună (lipseşte o paranteză în jurul primului OR). De exemplu, atunci când @soc=3 sunt incluse şi rândurile în care f.soc=0 şi rândurile în care f.soc=3, dar nu şi rândurile în care f.soc=2. Asta vroiai ?

    Răzvan 

  •  08-16-2007, 2:17 PM 2495 in reply to 2494

    Re: clauza where cu case sau if

    Dacă totuşi cerinţa nu era cea scrisă de mine, iar condiţia din mesajul tău anterior furniza rezultatele dorite, atunci poţi să o simplifici astfel:

    f.soc=0 or (f.soc is null and @soc=0) or f.soc=@soc

    Răzvan 

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems