Sql 从where子句添加3个新的派生字段

Sql 从where子句添加3个新的派生字段,sql,oracle,field,Sql,Oracle,Field,我有以下疑问, select * from (select a.id ,a.dt ,a.bal_desc ,c.bal_cd ,c.bal_amt ,row_number() over (partition by b.id order by b.prd_id desc, b.event desc) as rnum from tbl_a

我有以下疑问,

select *
from   (select a.id
              ,a.dt
              ,a.bal_desc
              ,c.bal_cd
              ,c.bal_amt
              ,row_number() over (partition by b.id order by b.prd_id desc, b.event desc) as rnum
        from   tbl_a a
              ,tbl_b b
              ,tbl_c c
              ,tbl_d d
        where  a.id = b.id
        and    a.dt = b. dt
        and    c.cd = d.cd
        and    a.id = c.id
        and    a.dt = c.dt
        and    a.dt = 10222020
        and    cn_dt is null
        and    ev_cd = 'X'
        and    pgm_cd = 'X'
        and    wrk_tp_cd in ('1','2','3'))
where  rnum = 1;
当我运行上述查询时,生成的填充是不正确的。
a.ID
的每个实例都应该有一个
c.Bal\u Amt
值。有人能帮我理解为什么当我单独运行
WRK\u TP\u CD
时,我得到了3种不同的总体规模,它们比同时运行所有3种时更接近预期的总体规模

另外,我希望有人能告诉我如何运行所有3个
WRK_TP_CD
,而不是所有的值都落在
BAL_AMT
字段中,我希望在我的select语句中看到3个单独的字段,分别对应于
WKR_TP_CD

换句话说,我的结果集将有一个
WKR_TP_CD 1、2和3
字段,每个字段都有相应的值


谢谢

听起来您需要3个条件字段来显示余额金额的值,具体取决于WRK_TP_CD的某个值。我会尝试一个案例陈述

Select * 
from (select a.ID,
        a.DT,
        a.Bal_Desc,
        c.Bal_CD,
        case when WRK_TP_CD = '1' then c.Bal_AMT else null end as Bal_AMT_1,
        case when WRK_TP_CD = '2' then c.Bal_AMT else null end as Bal_AMT_2,
        case when WRK_TP_CD = '3' then c.Bal_AMT else null end as Bal_AMT_3,
        ROW NUMBER () Over (partition by b.ID order by b.PRD_ID desc, b.event desc) as RNUM
    FROM TBL_A a, TBL_B b, TBL_C c, TBL_D d
    where a.ID = B.ID
        and a.DT = b. DT
        and c.CD = d.CD
        and a.ID = C.ID
        and a.DT = c.DT
        and a.DT = 10222020
        and cn_dt is null
        and ev_cd = 'X'
        and PGM_CD = 'X'
        and WRK_TP_CD in ('1', '2', '3'))
Where rnum = 1;

今天的提示:切换到现代的显式
JOIN
语法!更容易写(没有错误),更容易阅读和维护,如果需要,更容易转换为外部连接!左对齐SQL非常难读,也很难写。实际上,您应该格式化代码并使用JOIN而不是where子句,因为它具有以下优点:1)易于阅读;2) 易于检查,如果您的逻辑以适当的方式表达;3) 易于编辑,还有一件事要感谢上帝发明了WITH子句将语句拆分为子表,而不是从selectJarlh和@astentx中进行选择,感谢您的回复。你知道如何将WRK_TP_CD 1 2 3放入我的选择域1、2和3吗?