Dostal som nasledujúci kód SQL (súčasť vybraného príkazu):
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 to prechádzam po niekoľkomiliónovej tabuľkezáznamy. Z môjho chápania SQL skontroluje prvý prípad, keď pre všetky riadky, potom druhý pre všetky položky atď. To trvá veky. Teraz som si myslel, že musí existovať jednoduchší spôsob, ako to urobiť.
Myslel som na uloženú procedúru / vlastnú funkciu, ktorá má v zásade výstup -1, 0 alebo 1 v závislosti od záznamu.
Vopred ďakujem
odpovede:
1 pre odpoveď č. 1Pre možné zlepšenie rýchlosti urobte NULL
najskôr skontrolujte, či je porovnanie stĺpcov posledné, a refaktor, aby ste odstránili vnorené súbory 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 pre odpoveď č. 2
Váš prípad by sa dal zjednodušiť ako:
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
To však váš dopyt neurýchli. Ak chcete vybrať milióny riadkov, aj tak by to chvíľu trvalo.