根据行值合并Oracle中的多个列

时间:2014-03-05 04:35:14

标签: sql oracle merge

我查看了许多合并列问题,但未能找到解决我的特定问题的问题。我正在为学校做一个项目,我已经完成了大部分工作,但我仍然坚持这个问题的一小部分。

基本上,我在我创建的表上运行DESCRIBE命令并获得此结果:

Name                                      Null?    Type
----------------------------------------- -------- ------------
COURSEID                                  NOT NULL VARCHAR2(7)
COURSE_NAME                               NOT NULL VARCHAR2(35)
STUDENT_COUNT                                      NUMBER(5)

我需要做的是使用USER_TAB_COLS数据字典重新创建此结果。这是我到目前为止所得到的结果:

select column_name "Name",
       replace(replace(nullable, 'N', 'NOT NULL'), 'Y') "Null?",
       (data_type || '(' || data_length || ')') "Type"
  from user_tab_cols
 where column_name = 'COURSEID'
    or column_name = 'COURSE_NAME'
    or column_name = 'STUDENT_COUNT';


Name                                      Null?    Type
----------------------------------------- -------- ------------
COURSEID                                  NOT NULL VARCHAR2(7)
COURSE_NAME                               NOT NULL VARCHAR2(35)
STUDENT_COUNT                                      NUMBER(22)

我的问题在于STUDENT_COUNT行。 Type的值是错误的。另外两行需要组合DATA_TYPE和DATA_LENGTH列以获得正确的输出,但STUDENT_COUNT需要组合DATA_TYPE和DATA_PRECISION以获得正确的输出。我如何将不同的列组合成一个,具体取决于行?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

修改它以使用如下所示的CASE语句:

select column_name "Name",
       replace(replace(nullable, 'N', 'NOT NULL'), 'Y') "Null?",
       (data_type || '(' || case
         when data_type = 'NUMBER' then
          data_precision
         else
          data_length
       end || ')') "Type"
  from user_tab_cols
 where column_name = 'COURSEID'
    or column_name = 'COURSE_NAME'
    or column_name = 'STUDENT_COUNT';