下面的case语句似乎不是我想要的结果的最佳或最有效的方法。
结果必须在1字段中的1行中,如下所示。如果有1个PO和1个IREQ,则结果应在LINE_COMMENT字段的行上显示“ 1 PO,1 IREQ”。如果只有2个PR,结果应该在LINE_COMMENT字段的行上显示“ 2 PR”。此过程将重复大约65K次,结果会有所不同。
今天的一条线明天可能会在根据数据更改重新查询时发生更改(例如,今天的结果可能是“ 1 PO,2 PR”,明天的行结果可能是“ 2 PO”。
此外,PO计数来自其自己的表,而PR和IREQ来自另一个表,两个表都连接到具有2个唯一键的另一个表。
作为一个新的自学成才的分析师,我只尝试过Case陈述。请告知是否有更有效的方法来处理此问题,尤其是因为完整查询将处理约30种不同的组合。
以下是根据特定条件查找数据所需的较大语句的样本。
CASE
WHEN COUNT PO >= 1 THEN
CASE
WHEN COUNT PR >= 1 THEN
CASE
WHEN COUNT IREQ >= 1 THEN
PO, PR, IREQ
ELSE
PO, PR
END
WHEN COUNT IREQ >= 1 THEN
PO, IREQ
ELSE
PO
END
WHEN COUNT PR >= 1 THEN
CASE
WHEN COUNT IREQ >= 1 THEN
PR, IREQ
ELSE
PR
END
WHEN COUNT IREQ >= 1 THEN
IREQ
END LINE_COMMENT
PO PR IREQ RESULT for LINE_COMMENT
1 3 1 1 PO, 3 PR, 1 IREQ
2 1 0 2 PO, 1 PR
1 0 1 1 PO, 1IREQ
1 0 0 1 PO
0 2 1 2 PR, 1 IREQ
0 1 0 1 PR
0 0 2 2 IREQ
0 0 0 NO RESULTS
或者,也许您想要解码:
select decode(po, 0, '', TO_CHAR(po) || ' PO, ')
|| decode(pr, 0, '', TO_CHAR(pR) || ' PR, ')
|| decode(ireq, 0, '', TO_CHAR(ireq) || ' IREQ ') LINE_COMMENT
from test;
这是演示
结果:
LINE_COMMENT
1 PO, 3 PR, 1 IREQ
2 PO, 1 PR,
1 PO, 1 IREQ
1 PO,
2 PR, 1 IREQ
1 PR,
2 IREQ
@Littlefoot发表评论后,我将其更改为:
select decode(LINE_COMMENT, '', 'NO RESULTS', rtrim(LINE_COMMENT,',')) LINE_COMMENT
from (
select decode(po, 0, '', TO_CHAR(po) || ' PO,')
|| decode(pr, 0, '', TO_CHAR(pR) || ' PR,')
|| decode(ireq, 0, '', TO_CHAR(ireq) || ' IREQ') LINE_COMMENT
from test);
结果:
LINE_COMMENT
1 PO,3 PR,1 IREQ
2 PO,1 PR
1 PO,1 IREQ
1 PO
2 PR,1 IREQ
1 PR
2 IREQ
NO RESULTS
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句