Piszę zapytanie SQL, w którym kilka zwróconych kolumn należy obliczyć w zależności od dość wielu warunków.
Obecnie używam zagnieżdżonych instrukcji case, ale robi się bałagan. Czy istnieje lepszy (bardziej zorganizowany i / lub czytelny) sposób?
(Używam Microsoft SQL Server, 2005)
Uproszczony przykład:
SELECT
col1,
col2,
col3,
CASE
WHEN condition
THEN
CASE
WHEN condition1
THEN
CASE
WHEN condition2
THEN calculation1
ELSE calculation2
END
ELSE
CASE
WHEN condition2
THEN calculation3
ELSE calculation4
END
END
ELSE
CASE
WHEN condition1
THEN
CASE
WHEN condition2
THEN calculation5
ELSE calculation6
END
ELSE
CASE
WHEN condition2
THEN calculation7
ELSE calculation8
END
END
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
sql
sql-server
sql-server-2005
select
nested
Sophia
źródło
źródło
CASE WHEN
Odpowiedzi:
Możesz spróbować jakiejś sztuczki COALESCE, np .:
źródło
Zapakuj wszystkie te przypadki w jeden.
źródło
Możesz łączyć wiele warunków, aby uniknąć sytuacji:
źródło
Osobiście robię to w ten sposób, ograniczając osadzone wyrażenia CASE. Zamieszczam również komentarze, aby wyjaśnić, co się dzieje. Jeśli jest zbyt skomplikowany, podziel go na funkcję.
źródło
Oto proste rozwiązanie zagnieżdżonej statystyki przypadku „Złożona”: - Wyrażenie złożonej analizy przypadku
Upewnij się tylko, że masz instrukcję końcową dla każdej instrukcji przypadku
źródło
Możemy łączyć wiele warunków razem, aby zmniejszyć narzut wydajności.
Niech będą trzy zmienne abc, na których chcemy wykonywać przypadki. Możemy to zrobić jak poniżej:
źródło
funkcja zdefiniowana przez użytkownika może lepiej serwerować, przynajmniej w celu ukrycia logiki - szczególnie. jeśli musisz to zrobić w więcej niż jednym zapytaniu
źródło
Przeszedłem przez to i znalazłem wszystkie odpowiedzi super fajne, jednak chcę dodać do odpowiedzi udzielonej przez @deejers
możesz uczynić ELSE opcjonalnym, ponieważ nie jest to obowiązkowe, jest to bardzo pomocne w wielu scenariuszach.
źródło
Ten przykład może ci pomóc, obraz pokazuje, jak będzie wyglądać instrukcja przypadku SQL, gdy występują pętle if i więcej niż jedna wewnętrzna pętla if
źródło