Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用Oracle subselect替换CASE语句_Sql_Oracle_Case_Subquery - Fatal编程技术网

Sql 使用Oracle subselect替换CASE语句

Sql 使用Oracle subselect替换CASE语句,sql,oracle,case,subquery,Sql,Oracle,Case,Subquery,嗨,伙计们 有人能帮我在Oracle database 10g中进行子查询吗?我需要将第一个表中一列的值提取为第二个表中另一列的值。 我目前使用以下语句: SELECT CASE WHEN A.column1 = 'A' THEN 'aaa' WHEN A.column1 = 'B' THEN 'bbb' ....... WHEN A.column1 = 'X' THEN 'xxx' ELSE 'bad' END AS COLUMN1, A.* FROM TRANSACTION_TABLE

嗨,伙计们

有人能帮我在Oracle database 10g中进行子查询吗?我需要将第一个表中一列的值提取为第二个表中另一列的值。 我目前使用以下语句:

SELECT 
CASE WHEN A.column1 = 'A' THEN 'aaa'
WHEN A.column1 = 'B' THEN 'bbb'
.......
WHEN A.column1 = 'X' THEN 'xxx'
ELSE 'bad' END AS COLUMN1, A.* 
FROM TRANSACTION_TABLE A,  CATEGORY_TABLE B 
WHERE A.column1 IS NOT NULL 
AND A.column1 <> ' '
这不是一种优雅的方法,因此我尝试使用CATEGORY_表B中的子选择,如下所示:

SELECT A.column1, A.* 
FROM TRANSACTION_TABLE A,  CATEGORY_TABLE B 
WHERE A.column1 IS NOT NULL 
AND A.column1 = B.column_b_1 
AND A.column1 <> ' '
AND A.column1 IN (SELECT B.column_b_1_descr FROM CATEGORY_TABLE B 
WHERE B.FIELDNAME = 'column1' AND A.column1 = B.column_b_1)
因此,我无法通过使用子查询获得任何结果,也不想在许多情况下继续使用CASE,只想用B.column_B_1_descr中的描述性值替换A.column1值,因为它们更易于阅读。 如果有任何反馈,我将不胜感激。
谢谢,除非我误解了你的问题

CATEGORY_TABLE:
  name | value
   A      aaa
   B      bbb
   C      ccc
 ...


SELECT B.value AS COLUMN1, A.\* 
FROM TRANSACTION\_TABLE A, CATEGORY\_TABLE B 
WHERE A.column1 = B.name


不需要where子句,因为内部联接会自动排除具有空值或不匹配的行。

为了澄清,当column1为“A”时,输出行中column1字段需要字符串“aaa”,而不是名为“aaa”的列中的值,对吗?如果要保留“bad”值,将其转换为外部联接,并将SELECT的第一部分更改为SELECT Coalescet2.value,“bad”为COLUMN1。。。
SELECT t2.value as COLUMN1, t1.\* 
FROM TRANSACTION\_TABLE t1 
INNER JOIN CATEGORY\_TABLE t2 ON t1.column1 = t2.name;