0

これは、テーブルを生成するために使用しているクエリです。

SELECT cu.idchanneluser AS Approver,
     mcr.idrule AS Rule,
     mrd.idseq AS Seq,
     mcr.idcust AS CustID,
     cu.iduser AS USERID
FROM mstchanneluser cu,
     mstcatruledetail mrd,
     mstcatrule mcr
WHERE idchannel='01'
     AND mrd.idlist=cu.iduser
     AND mrd.idrule=mcr.idrule
     AND mcr.nbrauth='2'
     AND mcr.isautoauth='N'

そしてこれは結果のスナップショットです:

ここに画像の説明を入力してください

しかし、私はこのような結果が欲しいです:

   FirstAuthorizer SecondAuthorzier Rule    
   rohitcorp        ajitcorp         3090  
   CORPTEST         TESTCORP         8634
   ABHIMAKER        CORPTEST         11705

私はこのクエリを試しました:

SELECT CASE WHEN idseq = '0' THEN idchanneluser ELSE NULL END AS Approver,
    case when idseq = '1' THEN idchanneluser  ELSE NULL END AS secondApprover,
    cu.idchanneluser AS Approver,
    mcr.idrule AS Rule,
    mrd.idseq AS Seq,
    mcr.idcust AS CustID,
    cu.iduser AS USERID
FROM mstchanneluser cu, 
    mstcatruledetail mrd, 
    mstcatrule mcr 
WHERE idchannel='01'
    AND mrd.idlist=cu.iduser
    AND mrd.idrule=mcr.idrule 
    AND mcr.nbrauth='2'
    AND mcr.isautoauth='N'

スナップショットを確認すると、この結果が返されます。

ここに画像の説明を入力してください

4

2 に答える 2

3

MAXこれは2番目のクエリから派生したものであり、使用してグループ化するだけです。mcr.idrule

SELECT MAX(CASE WHEN idseq = '0' THEN idchanneluser ELSE NULL END) AS Approver
    ,  MAX(CASE WHEN idseq = '1' THEN idchanneluser ELSE NULL END) AS secondApprover
    ,  mcr.idrule AS RULE
FROM   mstchanneluser cu
    ,  mstcatruledetail mrd
    ,  mstcatrule mcr
WHERE idchannel = '01'
    AND mrd.idlist = cu.iduser
    AND mrd.idrule = mcr.idrule
    AND mcr.nbrauth = '2'
    AND mcr.isautoauth = 'N'
GROUP BY mcr.idrule
于 2012-11-23T04:48:30.837 に答える
0

分析関数リードラグを使用したオラクルの別の方法

select tab.y FirstAuthorizer,tab.x SecondAuthorzier,tab.rule from
(
select lead(appprover,0) over (partition by rule order by seq) x ,
lag(appprover,1) over (partition by rule order by seq) y,
rule
from tbl ) tab
where tab.y is not null;
于 2012-11-23T10:46:54.560 に答える