În cazul în care SQL Condiționat

voturi
8

Am o procedură stocată numit spGetOrders care acceptă câțiva parametri: @startdate și @enddate. Aceasta interoghează un „Comenzi“ tabel. Una dintre coloanele din tabel se numește „ClosedDate“. Această coloană va organiza NULL dacă o comandă nu a fost închisă sau o valoare dată dacă are. Aș dori să adăugați un parametru @Closed care va avea o valoare de biți. Într-o lume simplă, aș fi capabil să facă ..

select * from orders o
where o.orderdate between @startdate AND @enddate
and (if @Closed = 1 then o.ClosedDate IS NULL else o.ClosedDate IS NOT NULL)

Evident, asta nu va merge .. Sunt, de asemenea, uita la sql dinamic, care este ultima mea stațiune, dar începe să arate ca răspunsul ..

Te rog ajuta-ma..

Întrebat 09/12/2008 la 17:42
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
14

Incearca asta:

select * from orders o
where o.orderdate between @startdate AND @enddate
and ((@Closed = 1 And o.ClosedDate IS NULL) Or (@Closed = 0 And o.ClosedDate IS NOT NULL))

Fii atent cu privire la varia în funcție de amestecare și și OR în cazul în care clauza. Atunci când face acest lucru, paranteza pentru a controla ordinea de evaluare este foarte importantă.

Publicat 09/12/2008 la 17:48
sursa de către utilizator

voturi
2

Declarație SQL:

SELECT *  
FROM orders  
WHERE orderdate BETWEEN @startdate AND @enddate  
AND (@Closed = 1 OR CLosedDate IS NOT NULL)
Publicat 09/12/2008 la 17:46
sursa de către utilizator

voturi
0

Basicly, se scrie.

select * from orders o
where o.orderdate between @startdate AND @enddate
and ((@Closed = 1 and o.ClosedDate IS NULL)
    or (@Closed != 1 and o.ClosedDate IS NOT NULL))

dublu, pot fi eliminate

Publicat 09/12/2008 la 17:50
sursa de către utilizator

voturi
0

Sau asta:

select * from orders o
where o.orderdate between @startdate AND @enddate
and (  (@Closed = 1 AND o.ClosedDate IS NULL)
     OR (ISNULL(@Closed, 0) <> 1 AND o.ClosedDate IS NOT NULL)
     )

Se pare că doriți ca toate ordinele între două date care au inconsecvente Închideți informații. Celelalte sugestii sunt, probabil, la fel de bun (sau mai bine), dar sunt destul de sigur că acest lucru funcționează și este ușor de citit pentru mine (cele mai multe dintre celelalte sugestii au apărut ca am fost dactilografiere).

Mult noroc!

Publicat 09/12/2008 la 17:48
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more