2011-12-16 23 views
7

To może być proste pytanie, ale jest to odpowiedź, której nigdy wcześniej nie widziałem. Czy istnieje sposób użycia warunku instrukcji if jako jego wartości? Byłoby to bardzo przydatne w przypadkach, w których wykonuje się wiele obliczeń w celu ustalenia, czy dany warunek jest spełniony, a jeśli tak, to obliczenie jest wynikiem.Czy istnieje sposób użycia warunku instrukcji If jako jej wartości?

Jako przykład:

if ([intense calculation] > 0, [same intense calculation], 0) 

jestem zainteresowany w szczególności w odniesieniu do SQL, jak pracuję nad raportem w dostępie teraz i tak nie można zapisać wynik intensywnych obliczeń w zmienna.

Odpowiedz

6

Nie wiem, czy taka koncepcja istnieje w Światowy Raport MS Access, ale jak o:

MAX([intense calculation], 0)

Oczywistą zaletą takiego podejścia jest to, że wyliczenie to wystarczy zrobić raz.

+0

i jeśli chcą mieć domyślną wartość, jeśli zmienna ma wartość NULL, jest NVL (w oracle) i co niestety - wszyscy lubią nazywać tę inną, ale nadal bardzo użyteczną i myślę, że każdy DBMS ma coś takiego. – Voo

+0

i co jeśli intensywna kalkulacja jest mniejsza niż 0? – mkk

+0

@mkk, następnie wynik jest równy 0, tak jak w poleceniu IF z plakatu. –

0

Jedno podejście w większości form SQL byłoby przenieść główną zapytanie do sub-zapytania, z kolumny obliczeniowej intensywnym aliasem i przetestowane w nowym zapytaniu zewnętrznym - tak:

select v.*, 
     case intense_calc > 0 then intense_calc else 0 end as positive_calc 
from (select [intense calculation] as intense_calc, 
      [other columns] 
     from ...) as v 
+0

Yup, myślę, że to jest droga. Myślałem o zrobieniu tego w ten sposób, ale chciałem sprawdzić, czy może jest jakaś niejasna składnia, o której nie wiedziałem, że mogłaby odwołać się do warunku. Dzięki! – Will

Powiązane problemy