/ / SQL upraszczający przypadek w przypadku w przypadku - sql, case

SQL upraszczający przypadek w przypadku - sql, case

Otrzymałem następujący kod SQL (część instrukcji select):

Case
When HilfsTab2.Gruppe = "HST" And Basis.Breite_FLA = Basis.Breite Then 0
Else Case When HilfsTab2.Gruppe = "SA" Or HilfsTab2.Gruppe = "HO / TB" Or
HilfsTab2.Gruppe = "PR" Then 0 Else Case
When HilfsTab2.Gruppe Is Null Then -1 Else 1 End End
End As IsHST_Fluegel

Teraz sprawdzam to na kilku milionowym stolewpisy. Z mojego zrozumienia, SQL sprawdza pierwszy przypadek dla wszystkich wierszy, a następnie drugi dla wszystkich wpisów i tak dalej. To trwa wieki. Teraz myślałem, że musi być łatwiejszy sposób na zrobienie tego.

Myślałem o procedurze składowanej / funkcji niestandardowej, która w zasadzie wyprowadza -1, 0 lub 1 w zależności od wpisu.

Z góry dziękuję

Odpowiedzi:

1 dla odpowiedzi № 1

Aby uzyskać możliwą poprawę prędkości, wykonaj NULL najpierw sprawdź, porównanie kolumny i refaktor, aby usunąć zagnieżdżone CASE:

CASE WHEN HilfsTab2.Gruppe IS NULL
THEN -1
WHEN HilfsTab2.Gruppe IN ("SA", "HO / TB", "PR")
OR (HilfsTab2.Gruppe = "HST" AND Basis.Breite_FLA = Basis.Breite)
THEN 0
ELSE 1
END AS IsHST_Fluegel

0 dla odpowiedzi nr 2

Twoja sprawa może zostać uproszczona, ponieważ:

Case
When HilfsTab2.Gruppe = "HST" And Basis.Breite_FLA = Basis.Breite Then 0
When HilfsTab2.Gruppe in ("SA", "HO / TB", "PR") Then 0
When HilfsTab2.Gruppe Is Null Then -1
Else 1
End As IsHST_Fluegel

Ale to nie przyspieszy twojego zapytania. Jeśli chcesz wybrać miliony wierszy, i tak zajęłoby to trochę czasu.