有人可以帮助我将以下oracle代码转换为标准的大查询吗
SELECT
Table1.BIC_ZC2ISBN10,
sum ( decode(Table1.BIC_ZC2DCINDC,'H', (decode(Table1.BIC_ZC2MOVTYP,
'Z03',Table1.BIC_ZK2CLABS2,
'Z35',Table1.BIC_ZK2CLABS2,
'Z64',Table1.BIC_ZK2CLABS2,
'Z77',Table1.BIC_ZK2CLABS2,
0)),0) - decode(Table1.BIC_ZC2DCINDC,'S',
(decode(BOADMIN.BIC_GM_AP2OINVS300_BO_VW.BIC_ZC2MOVTYP,
'Z04',Table1.BIC_ZK2CLABS2,
'Z36',Table1.BIC_ZK2CLABS2,
'Z65',Table1.BIC_ZK2CLABS2,
'Z78',Table1.BIC_ZK2CLABS2,
0)),0) )
FROM
Table1
GROUP BY
Table1.BIC_ZC2ISBN10
我是大型查询的新手,对“解码”功能一无所知。
谢谢
答案 0 :(得分:2)
可以使用CASE语句代替DECODE
CASE expr WHEN value THEN result [WHEN ...] [ELSE else_result] END
答案 1 :(得分:1)
由于@heregoes建议case when
适用于大型查询,因此您可以使用以下查询。
SELECT
TABLE1.BIC_ZC2ISBN10,
SUM(CASE
WHEN TABLE1.BIC_ZC2DCINDC = 'H' THEN CASE
WHEN TABLE1.BIC_ZC2MOVTYP IN(
'Z03', 'Z35', 'Z64', 'Z77'
) THEN TABLE1.BIC_ZK2CLABS2
ELSE 0
END
ELSE 0
END - CASE
WHEN TABLE1.BIC_ZC2DCINDC = 'S' THEN CASE
WHEN BOADMIN.BIC_GM_AP2OINVS300_BO_VW.BIC_ZC2MOVTYP IN (
'Z04',
'Z36',
'Z65',
'Z78'
) THEN TABLE1.BIC_ZK2CLABS2
ELSE 0
END
ELSE 0
END
)
FROM TABLE1
GROUP BY TABLE1.BIC_ZC2ISBN10;
干杯!
答案 2 :(得分:0)
您可以通过条件聚合来做到这一点。但是,您不需要嵌套的CASE
表达式。实际上,您甚至不需要 multiple CASE
表达式。一个就足够了:
SELECT t1.BIC_ZC2ISBN10,
SUM(CASE WHEN t1.BIC_ZC2DCINDC = 'H' AND
t1.BIC_ZC2MOVTYP IN ('Z03', 'Z35', 'Z64', 'Z77')
THEN t1.BIC_ZK2CLABS2
WHEN t1.BIC_ZC2DCINDC = 'S' AND
bg.BIC_ZC2MOVTYP IN ('Z04', 'Z36', 'Z65', 'Z78')
THEN - t1.BIC_ZK2CLABS2
ELSE 0
END)
. . .
请注意,BOADMIN.BIC_GM_AP2OINVS300_BO_VW
子句中未定义FROM
。我为其定义了表别名bg
,为第一个表定义了t1
。