if/else in where?

Jamell

Grünschnabel
Hallo zusammen

Ich hab da mal eine kleine Frage

Ich hab mir ein Query gemacht, welches auch super funktioniert:


Code:
DECLARE @sprachcode			int
DECLARE	@mandidin			char(2)
DECLARE	@insttypin			int
DECLARE	@pflichtigcode		char(4)

SET @mandidin = 'ZZ'
SET @sprachcode = 2055
SET @insttypin = -1
SET @pflichtigcode = ''

SELECT i.institutionid,
			a.name,
			i.mandid,
			i.adrnbr,
			i.institutionstatus,
			'institutionabrnr'	= ISNULL(i.institutionabrnr,''),
			
			'insttyp'			= c.langtext,
			'instcode'			= ISNULL(i.institutioncode,''),
			'instvertragnbr'	= ISNULL(i.institutionvertragnbr,''),
			p.pflichtigkeitcode
	FROM institution i
	INNER JOIN adresse a ON i.mandid = a.mandid AND i.adrnbr = a.adrnbr
	INNER JOIN codes c ON i.institutiontyp = c.wert
	LEFT JOIN pflichtigkeit p ON i.institutionid = p.pflichtigkeitid AND i.mandid = p.mandid
	WHERE	i.mandid	= @mandidin	
	AND		c.typ		= 'InstitutionTyp'
	AND		(i.institutiontyp	= @insttypin or @insttypin = -1)
	AND		i.institutionstatus = 1
	AND		c.sprachid	= @sprachcode

Nun möchte ich aber, wenn @pflichtigcode NICHT leer ist, das Query um folgende Zeile erweitern:

Code:
	AND		p.pflichtigkeitcode LIKE (UPPER(REPLACE(@pflichtigcode,' ','')) + '%')

..soweit ich weiss funktioniert da if/else bzw. case/when nicht. Hat jemand von Euch eine Idee, wie ich dies lösen könnte, oder wie ich das Query am besten umschreiben sollte**** Irgendne Lösung gibts bestimmt, aber bei mir ist im Moment alles blockiert

Besten Dank bereits!

Grüsse
 
MS SQL?
Oracle?
MySQL?

Ich denke es ist MySQL. in MySQL funktioniert IF()
SQL:
WHERE field_1 = IF(field_2=1, 'A', 'B')

Nachtrag:
In deinem Fall reicht aber ein OR
SQL:
(ISNULL(@pflichtigcode) OR p.pflichtigkeitcode LIKE (UPPER(REPLACE(@pflichtigcode,' ','')) + '%'))
 
Zuletzt bearbeitet von einem Moderator:
Also mit OR
Ersetze ist is_null() durch einen MSSQL-Befehl der auf NULL prüft. Wenns keinen gibt durch ISNULL(var, 'NULL')='NULL'

SQL:
(is_null(@pflichtigcode) OR p.pflichtigkeitcode LIKE (UPPER(REPLACE(@pflichtigcode,' ','')) + '%'))
 
Zuletzt bearbeitet von einem Moderator:
hehe, so einfach wär's :) hab da jetzt so lang drüber nachgedacht und immer kompliziertere sachen ausprobiert.. so funktionierts super, danke dir! :)
 
Zurück