oracle group按不同的事务ID

时间:2016-06-27 10:29:27

标签: sql oracle oracle11g

我希望使用事务ID(TRXID)可视化我的gridcontrol行和操作块。我想添加一个列,例如trxID是146然后是1当149然后是2当155然后是1然后162然后是2 ....使用此列我将能够使用COLORCOLUMN可视化我的行块。我只会使用2种不同的颜色。有什么建议吗?

TRXID COLUMN1 COLUMN2 COLORCOLUMN
144   ..      ..      1
144   ..      ..      1
144   ..      ..      1
151   ..      ..      2
151   ..      ..      2
167   ..      ..      1
167   ..      ..      1
167   ..      ..      1
185   ..      ..      2
190   ..      ..      1

这是我的查询:

                                     SELECT 
                                        D.TRX_ID TRXID,
                                        A.AGENT_NAME, 
                                        S.NAME SKILL_NAME,
                                        D.SKILL_LEVEL,  
                                        CASE D.CHANGE_TYPE WHEN 'DROP' THEN 'DÜŞÜRME' WHEN 'ADD' THEN 'EKLEME' END CHANGE_TYPE, 
                                        L.LOGIN_NAME,
                                        H.CHANGE_DATE,
                                        --COLORCOLUMN HERE 
                                     FROM CC_RTM_DBA.SKILL_CHANGE_DETAIL_HIST D,
                                        CC_RTM_DBA.SKILL_CHANGE_HIST H,
                                        CC_RTM_DBA.CFG_AGENT A,
                                        CC_RTM_DBA.CFG_SKILL S,
                                        CC_RTM_DBA.CFG_RTM_LOGIN L
                                     WHERE D.TRX_ID = H.ID
                                        AND D.AGENT_ID = A.ID
                                        AND D.SKILL_ID = S.ID
                                        AND L.LOGIN_ID = H.CHANGE_USER
                                     ORDER BY D.TRX_ID DESC, A.AGENT_NAME, SKILL_NAME, CHANGE_TYPE

和图片在这里: enter image description here

2 个答案:

答案 0 :(得分:1)

您可以将函数dense_rank()mod()结合使用。

select trxid, mod(dense_rank() over (order by trxid), 2) as color from t

在下面的示例中,dense_rank()给出值1,1,1,2,2,3,4。 mod()将偶数值更改为1,将奇数更改为0。

with t as (select 144 trxid, '..' c1, '..' c2 from dual union all
           select 144 trxid, '..' c1, '..' c2 from dual union all
           select 144 trxid, '..' c1, '..' c2 from dual union all
           select 151 trxid, '..' c1, '..' c2 from dual union all
           select 151 trxid, '..' c1, '..' c2 from dual union all
           select 167 trxid, '..' c1, '..' c2 from dual union all
           select 185 trxid, '..' c1, '..' c2 from dual)
select trxid, c1, c2, mod(dense_rank() over (order by trxid), 2) as color from t

trxid  c1  c2  color
144    ..  ..      1
144    ..  ..      1
144    ..  ..      1
151    ..  ..      0
151    ..  ..      0
167    ..  ..      1
185    ..  ..      0

答案 1 :(得分:0)

你想改变颜色"当列TRXID改变值时。正确?

如果是这样,你可以尝试:

select trxid, ... ,
       LAG(trxid, 1, 0) OVER (ORDER BY trxid), --this is the previous value
       CASE WHEN trxid != LAG(trxid, 1, 0) OVER (ORDER BY trxid)
            THEN 2
            ELSE 1 END as COLORCOLUMN;
from yourtable
order by trxid;

抱歉,我无法测试。