1

stackoverflowでこれを検索しようとしましたが、答えが見つかりません。

問題を単純化して読みやすくしました。必要に応じて拡張します。

従業員のSQLテーブルがNAME, ADDRESS, HIRE_DATEあり、最近REHIRE_DATE、新しい従業員が会社を再開した時期を追跡するためにを追加しました。NAME, ADDRESSと最新の採用日を取得するSQL検索を作成したいと思います。再雇用の場合はフィールドを使用しREHIRE_DATEますが、元の場合はHIRE_DATEフィールドを使用します。現場でCASE探している声明だと思いますが、それ以上は迷ってしまいます。NULLREHIRE_DATE

4

4 に答える 4

4

これにより、必要な結果が得られます。

SELECT Name
    , Address
    , CASE WHEN REHIRE_DATE IS NULL THEN HIRE_DATE ELSE REHIRE_DATE END
FROM Employee

これは、再雇用日かどうかをチェックします。そうでない場合はNULL、雇用日を取得し、そうでない場合は、再雇用日を返します。

于 2012-07-20T15:22:25.257 に答える
4

私はあなたがする必要があるのはこれだけだと思います:

SELECT
    NAME
    , ADDRESS
    , ISNULL(REHIRE_DATE, HIRE_DATE) AS MostRecentHireDate
FROM Employee

この場合、再雇用日は、記入されている場合は常に雇用日よりも長くする必要があります(雇用される前に雇用することはできません。したがって、再雇用日がnullでない限り、常に再雇用日を取得する必要があります。採用日を取るポイント。いいですね。

于 2012-07-20T15:22:49.247 に答える
0

さらに良いことに、IFNULL()を使用します。

SELECT IFNULL(REHIRE_DATE,HIRE_DATE) FROM Employee
于 2012-07-20T15:22:45.893 に答える
0

また、coalesce()関数を使用して、このようにすることもできます。

select name, address, coalesce(rehire_date,hire_date) from table_name

最初の値がnullの場合、2番目の値に移動します

于 2012-07-20T17:46:43.487 に答える