Hy guys,使用Oracle子查询替换CASE语句
任何人都可以帮我一个Oracle数据库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_TABLE 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值,因为它们更易于阅读。 我会很感激任何反馈。 感谢
为了澄清,当column1为'A'时,您希望输出行中“column1”字段的字符串'aaa',而不是列*中的值*'aaa',对不对? – 2009-07-16 01:12:10