0

プログラミング言語でこれを実行できることはわかっていますが、フロントエンド コードを邪魔する必要がないように、SQL 内で実行したいと考えています。

name1、name2、name3 の 3 つの名前フィールドを持つテーブルがあります。

これらのフィールドのいずれかまたはすべてに値がランダムに存在する可能性があります。

次のような 3 つのフィールドを返すクエリが必要です。

name1、name2、name3 をチェックします。最初のフィールドの値は first_name に入り、2 番目のフィールドの値は second_name に入り、次に third_field に入ります。

first_name を入力するための CASE-END ステートメントを簡単に記述できますが、second_name のロジックを記述しようとすると、さらに複雑になります。

SQL:

SELECT 
  CASE
    WHEN NAME1 IS NOT NULL
    THEN NAME1
    ELSE
      CASE
        WHEN NAME2 IS NOT NULL
        THEN NAME2
        ELSE
          CASE
            WHEN NAME3 IS NOT NULL
            THEN NAME1
            ELSE ''
          END
      END
  END FIRST_NAME
  FROM TABLE_NAME

では、second_name と third_name をどのように処理すればよいでしょうか。それとももっと簡単な方法ですか?

どんな助けでも大歓迎です..

4

1 に答える 1

4

あなたは潜在的に次のようなことをすることができます

SELECT coalesce( name1, name2, name3 ) first_name,
       (case when name1 is not null 
             then nvl( name2, name3 )
             when name2 is not null
             then name3
             else null
         end) second_name,
       (case when name1 is not null and
                  name2 is not null
             then name3
             else null
         end) third_name
  FROM your_table

ただし、これを行いたいという願望は、対処する必要があるデータ モデルの問題があることを示しているようです。明らかにすべて同じデータを格納する 3 つの列がある場合、テーブルは正しく正規化されていません。既存のテーブルと 1:n の関係を持つ別のテーブルに名前を格納すると、より優れたデータ モデル (およびより簡単なクエリ) になります。

于 2012-10-25T21:43:16.457 に答える