MSSQL - problem z zapytaniem COALESCE() ?

0

Mam dane:
Imie, Nazwisko, Adres, Kodpocztowy

i chciałem mieć kolejną kolumnę wynikową z tymi danymi ale z następującymi informacjami:

  • w przypadku braku adresu: brak adresu
  • w przypadku braku kodu pocztowego: brak kodu pocztowego
  • w przypadku braku adresu i kodu pocztowego: brak adresu i kodu pocztowego

np.
Jan Kowalski, brak adresu, 11-111
Stach Malinowski, ul.Wiejska 10, brak kodu pocztowego
Jozek Kowal, brak adresu i kodu pocztowego

napisałem:

select Imie+' '+Nazwisko+' '+COALESCE(Adres+' '+Kodpocztowy,'brak adresu i kodu pocztowego'+Adres,'brak adresu'+' '+Kodpocztowy,'brak kodu pocztowego' AS 'Wspólne dane');

i cosik nie działa:/

2
  1. COALESCE zwraca pierwszą wartość NOT NULL.
  2. NULL + cokolwiek daje NULL.
  3. U Ciebie:
COALESCE(
	Adres+' '+Kodpocztowy,
	'brak adresu i kodu pocztowego'+Adres,
	'brak adresu'+' '+Kodpocztowy,
	'brak kodu pocztowego' AS 'Wspólne dane')

Nie wiem czy AS 'Wspólne dane' nie powinny być poza ), może w MSSQLu to działa, ale nie napisałeś co Ci nie działa. Jedynie, że nie działa.

  1. Dlaczego nie zapiszesz tego w czytelniejszy sposób? Np.
CASE 
 WHEN ... THEN 'brak adresu i kodu'
 WHEN .. THEN ...
 ELSE ... 
END

Takie pakowanie za dużo rzeczy do COALESCE prowadzi to rozwiązań klasy "tricky".

  1. Dlaczego nie działa? Patrz logika COALESCE i arytmetyka na NULLach.

  2. Osobiście nie chciałoby mi się bawić w COALESCE w tym przypadku, bo skończyłoby się jakimś działającym, ale nieczytelnym konstruktem, gdzie przeplatane byłby: IFNULL, ISNULL, COALESCE, NVL.

0

Co nie działa?

1

Na pierwszy rzut oka masz błędy w kodzie, sprawdź tak:

SELECT CONCAT(Imie,'  ',
			  Nazwisko,'  ',
			  CASE WHEN Adres is null AND Kodpocztowy is null THEN 'brak adresu i kodu pocztowego'
				   ELSE COALESCE(Adres,'brak adresu') + COALESCE(Kodpocztowy,'brak kodu pocztowego')
		      END) AS 'Wspólne dane'
FROM MojaTAblica

Nie sprawdzone pisane z głowy ... i zakładamy że kolumny są null a nie puste albo ze spacjami ciągi ''.

1 użytkowników online, w tym zalogowanych: 0, gości: 1