【问题标题】:Merging multiple columns in Oracle based on row value根据行值合并Oracle中的多个列
【发布时间】:2014-03-05 04:35:13
【问题描述】:

我查看了许多合并列问题,但找不到一个可以解决我相当具体的问题的问题。我正在为学校做一个项目,我已经完成了大部分工作,但我被困在这个问题的一小部分。

基本上,我在我创建的表上运行 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 行。类型的值是错误的。其他两行需要结合 DATA_TYPE 和 DATA_LENGTH 列才能得到正确的输出,但 STUDENT_COUNT 需要结合 DATA_TYPE 和 DATA_PRECISION 才能得到正确的输出。如何根据行将不同的列合并为一个?非常感谢任何帮助。

【问题讨论】:

  • Decode() 或案例会有所帮助
  • 谢谢。案例完美地满足了我的需要。但我从未听说过解码()。它是如何工作的?
  • 解码(data_type,'NUMBER',data_precision,data_length) 就是这样!!
  • 漂亮而简单。我喜欢!我一定要记住那个。谢谢。

标签: sql oracle merge


【解决方案1】:

修改它以使用如下 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';

【讨论】:

  • 非常感谢!我什至从未想过使用案例。现在完美运行。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
相关资源
最近更新 更多