9

よろしくお願いします。これは素晴らしいコミュニティであり、ここで多くのプログラミングの答えを見つけました。

複数の列を持つテーブルがあり、そのうち5つには日付またはnullが含まれています。

5つの列のうちの1つに「NULL」値が含まれている場合、戻り値がnullであるという条件で、基本的に5つの列を1つの列に結合するSQLクエリを記述したいと思います。基本的に、最初の非nullを返す合体条件の反対で、最初のnullを返したいと思います。nullがない場合は、5つの日付のうち最大のものを返すのが最適ですが、5つの日付のいずれかを返すことで解決できます。

    C1         C2          C3        C4        C5
    --         --          --        --        --
 1/1/1991   1/1/1991    1/1/1991  1/1/1991  2/2/1992
   NULL     1/1/1991    1/1/1991  1/1/1991  1/1/1991

クエリの戻り値:

    C1
    --
 2/2/1992
   NULL

どうもありがとうございます。

(サーバーはMSSQL2008です)

4

6 に答える 6

4
select greatest(c1, c2, c3, c4, c5)
from table;

人生はとても簡単です:-)

(編集:Oracleで動作します)

于 2010-11-17T15:52:58.797 に答える
1

これを試して:

SELECT
    CASE WHEN t1.SomeDate IS NULL THEN NULL ELSE MAX(t1.SomeDate) END AS TheVal
FROM
(
SELECT C1 AS SomeDate FROM Table_1
UNION ALL
SELECT C2 AS SomeDate  FROM Table_1
UNION ALL
SELECT C3 AS SomeDate FROM Table_1
UNION ALL
SELECT C4 AS SomeDate FROM Table_1
UNION ALL
SELECT C5 AS SomeDate FROM Table_1
) t1
GROUP BY
t1.SomeDate
于 2010-11-17T15:53:24.597 に答える
1

それを考えすぎずに:

SELECT
  CASE WHEN c1 is null or c2 is null or c3 is null or c4 is null or c5 is null
       THEN null
       ELSE c1
  END
FROM mytable

私の編集は次のとおりです。

CASE 
 WHEN (c1 >= c2 AND c1 >= c3) THEN c1
 WHEN (c2 >= c1 AND c2 >= c3) THEN c2
 WHEN (c3 >= c1 AND c3 >= c2) THEN c3
END
于 2010-11-17T19:24:46.097 に答える
0

おそらく合体のバリエーション(-1を無効な値に置き換えます)?

COALESCE(C1、C2、C3、C4、C5、-1)= -1の場合はケースを選択し、それ以外の場合はNULLを選択します。

于 2019-06-20T01:45:16.843 に答える
-1

たぶんLEASTで?これがNULLでどのように機能するかわかりません。

于 2010-11-17T15:50:39.577 に答える
-2
SELECT 
    CASE WHEN C1 IS NULL THEN C2 WHEN C1 IS NULL AND C2 IS NULL THEN C3 WHEN C1 IS NULL AND C2 IS NULL AND C3 IS NULL THEN C4 WHEN C1 IS NULL AND C2 IS NULL AND C3 IS NULL AND C4 IS NULL THEN C5 ELSE C1 END AS REQUIREDNOTNULLVALUE 
FROM 
TABLE1
于 2010-11-17T18:08:02.970 に答える