我有一个表,说TAB1有以下的列 -
USER_ID NUMBER(5),
PHN_NO1 CHAR(20),
PHN_NO2 CHAR(20)
我不得不从TAB1记录读取到另一个表TAB2,使得所有记录与任一所述两个或两个PHN_NO1和PHN_NO2之一是长度为10的,并用5开始。
如果在一个记录,只说PHN_NO1满足条件和PHN_NO2没有的话,TAB2.P1应该是一样的,但TAB1.PHN_NO1应该TAB2.P2为NULL。
如果没有两个都满足该条件,则该记录应该不被插入到TAB2
TAB2结构将如
从TAB1选择保持的记录的ROWID - USER_ID数(5)
P1 CHAR(10) -保持TAB1.PHN_NO1如果它是长度为10的,并用5开始,否则为NULL
P2 CHAR(10) -保持TAB1.PHN_NO2如果它是长度为10的,并用5 beigns,否则为NULL
我可以写下面的查询来实现上述目标,但在情况与条件是重复的。 请建议的方式来实现上述以更好的方式。
CREATE TABLE TAB2
如
选择
用户身份,
CASE WHEN
(LENGTH(TRIM(PHN_NO1))= 10,TRIM(PHN_NO1)像 '5%')
然后
CAST(TRIM(PHN_NO1)为CHAR(10))
其他
CAST(NULL为CHAR(10))
END为P1,
CASE(LENGTH(TRIM(PHN_NO2))= 10,TRIM(PHN_NO2)像 '5%')
然后
CAST(TRIM(PHN_NO2)为CHAR(10))
其他
CAST(NULL为CHAR(10))
END AS P2
哪里
(LENGTH(TRIM(PHN_NO1)= 10,TRIM(PHN_NO1)像 '5%')
要么
(LENGTH(TRIM(PHN_NO2)= 10,TRIM(PHN_NO2)像 '5%')