equivalente ISNULL per campi vuoti
-
03-10-2019 - |
Domanda
C'è qualcosa di simile ISNULL () o COALESCE (), ma non che i controlli di valore nullo, ma per un valore vuoto.
Ad esempio:
SELECT cu.last_name, cu.first_name, cu.email, hu.email FROM
(SELECT DISTINCT c.first_name, c.last_name, c.email, c.household_id, h.head_of_household_id
FROM rd_customers c
JOIN rd_households h ON c.household_id = h.household_id
JOIN ad_registrations r ON r.customer_id = c.customer_id
JOIN ad_meeting_times a ON r.session_id = a.session_id and a.meeting_time_id = 203731) cu
LEFT JOIN rd_customers hu ON hu.customer_id = cu.head_of_household_id
invece di restituire quattro colonne mi piacerebbe ottenere tre e il terzo supponiamo di avere valori sia di cu.email o hu.email se il primo è vuoto! ISNULL e COALESCE non funzionano qui non so il motivo per cui
Soluzione
È sempre possibile utilizzare caso:
select case when cu.email is null or cu.email = '' then hu.email
else cu.email end as ColumnName
from YourTable
Altri suggerimenti
NULLIF restituisce la prima espressione se le due espressioni non sono uguali. Se le espressioni sono uguali, NULLIF restituisce un valore nullo del tipo di la prima espressione.
provare questo:
COALESCE(NULLIF(cu.email,''),NULLIF(hu.email,''))
restituirà NULL se cu.email e hu.email sono qualsiasi combinazione di stringa vuota o NULL
Ciò interferirà nullo o cu.email vuoto e uso hu.email invece:
SELECT cu.last_name,
cu.first_name,
CASE WHEN ISNULL(cu.email, '') = '' THEN
hu.email
ELSE
cu.email
END AS email
FROM
(
SELECT DISTINCT c.first_name,
c.last_name,
c.email,
c.household_id,
h.head_of_household_id
FROM rd_customers c
JOIN rd_households h
ON c.household_id = h.household_id
JOIN ad_registrations r
ON r.customer_id = c.customer_id
JOIN ad_meeting_times a
ON r.session_id = a.session_id
AND a.meeting_time_id = 203731
) cu
LEFT JOIN rd_customers hu
ON hu.customer_id = cu.head_of_household_id