次の列を持つTAB1というテーブルがあります
-USER_IDNUMBER(5)、
PHN_NO1 CHAR(20)、
PHN_NO2 CHAR(20)
TAB1から別のテーブルTAB2にレコードをフェッチして、すべてのレコードが2つまたはPHN_NO1とPHN_NO2はどちらも長さが10で、5から始まります。
レコードでPHN_NO1のみが条件を満たし、PHN_NO2が満たさない場合、TAB2.P1はTAB1.PHN_NO1と同じである必要がありますが、TAB2.P2はNULLである必要があります。
2つのどちらも条件を満たさない場合は、レコードをTAB2に挿入しないでください。
TAB2の構造は次のようになります
。USER_IDnumber(5)-TAB1
P1 char(10)から選択されたレコードのROWIDを保持します-長さが10で5で始まる場合はTAB1.PHN_NO1を保持し、それ以外の場合はNULL
P2 char(10) -長さが10で、5で始まる場合は、TAB1.PHN_NO2を保持します。それ以外の場合は、NULLです。
上記を達成するために以下のクエリを書くことができますが、CASEとWHEREの条件は繰り返されます。上記をより良い方法で達成する方法を提案してください。
CREATE TABLE TAB2
AS
SELECT
USER_ID、
CASE WHEN
(LENGTH(TRIM(PHN_NO1))= 10 AND TRIM(PHN_NO1)like '5%')
THEN
CAST(TRIM(PHN_NO1)as CHAR(10))
ELSE
CAST(NULL as CHAR( 10))
END AS P1、
CASE(LENGTH(TRIM(PHN_NO2))= 10 AND TRIM(PHN_NO2)like '5%')
THEN
CAST(TRIM(PHN_NO2)as CHAR(10))
ELSE
CAST(NULL as CHAR(10 ))
END AS P2
WHERE
(LENGTH(TRIM(PHN_NO1)= 10 AND TRIM(PHN_NO1)like '5%')
OR
(LENGTH(TRIM(PHN_NO2)= 10 AND TRIM(PHN_NO2)like '5%')