2

ISNULL() OR COALESCE() のようなものはありますが、null 値ではなく空の値をチェックします。

例えば:

  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

4 つの列を返す代わりに、3 つを取得し、3 つ目の列は、最初の列が EMPTY の場合、cu.email または hu.email のいずれかの値を持つと仮定します。ISNULL と COALESCE がここで機能しない理由がわからない

4

3 に答える 3

8

いつでもケースを使用できます:

select  case when cu.email is null or cu.email = '' then hu.email 
             else cu.email end as ColumnName
from    YourTable
于 2010-09-15T18:57:23.273 に答える
3

NULLIF(Transact-SQL)を見てください

2つの式が等しくない場合、NULLIFは最初の式を返します。式が等しい場合、NULLIFは最初の式のタイプのnull値を返します。

これを試して:

COALESCE(NULLIF(cu.email,''),NULLIF(hu.email,''))

cu.emailとhu.emailが空の文字列またはNULLの任意の組み合わせである場合、NULLを返します

于 2010-09-15T19:08:49.777 に答える
1

これにより、null または空の cu.email がキャッチされ、代わりに hu.email が使用されます。

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
于 2010-09-15T19:00:11.327 に答える