解决 Oracle SQL 中的 "single-row subquery returns more than one row" 错误

Solving "single-row subquery returns more than one row" error in Oracle SQL

给出以下查询

Select COLUMN_ID,  (Select 
CASE COLUMN_ID
WHEN 4 THEN 'WEIGHT'
WHEN 6 THEN 'CARGO_LENGTH'
WHEN 7 THEN 'WIDTH'
WHEN 8 THEN 'HEIGHT'
END 
GROOVE
FROM ALL_TAB_COLS where TABLE_NAME = 'TBL_CARGO')
FROM ALL_TAB_COLS where COLUMN_ID IN(4,6,7,8)

我喜欢只获取非空白列。我期望每个字段显示输出 4 6 7 8。我该怎么做?

所有子查询和内联视图都可以在单个查询中完成:

使用CASE表达式(冗长易懂):

SELECT COLUMN_ID,
  CASE COLUMN_ID
    WHEN 4
    THEN 'WEIGHT'
    WHEN 6
    THEN 'CARGO_LENGTH'
    WHEN 7
    THEN 'WIDTH'
    WHEN 8
    THEN 'HEIGHT'
  END GROOVE
FROM ALL_TAB_COLS
WHERE TABLE_NAME = 'TBL_CARGO'
AND COLUMN_ID   IN(4,6,7,8);

使用DECODE(看起来很短):

SELECT COLUMN_ID,
  DECODE(COLUMN_ID, 4, 'WEIGHT', 6, 'CARGO_LENGTH', 7, 'WIDTH', 8, 'HEIGHT')
FROM ALL_TAB_COLS
WHERE TABLE_NAME = 'TBL_CARGO'
AND COLUMN_ID   IN(4,6,7,8);

不需要子select,只需添加CASE表达式。也许是这样的?

Select COLUMN_ID,  
       CASE COLUMN_ID WHEN 4 THEN 'WEIGHT'
                      WHEN 6 THEN 'CARGO_LENGTH'
                      WHEN 7 THEN 'WIDTH'
                      WHEN 8 THEN 'HEIGHT'
       END  GROOVE
FROM ALL_TAB_COLS
where COLUMN_ID IN(4,6,7,8)

试试这个

Select COLUMN_ID, 
CASE COLUMN_ID
WHEN 4 THEN 'WEIGHT'
WHEN 6 THEN 'CARGO_LENGTH'
WHEN 7 THEN 'WIDTH'
WHEN 8 THEN 'HEIGHT'
END 
GROOVE
FROM ALL_TAB_COLS where TABLE_NAME = 'TBL_CARGO'
and COLUMN_ID IN(4,6,7,8)