Oracle并列查询,同一张表的不同条件的字段放在同一行

思路

SELECT 
    A.*,
    B1.字段1,
    B2.字段2
FROM 
    A
LEFT JOIN B AS B1 ON B1.ID = A.ID
LEFT JOIN B AS B2 ON B2.ID = A.FID

案例:

表IDO_GRADE_DETAIL:积分IDO加减分细节,每一件加减分的事件和分数

字段

FD_LOGIN_NAME 工号

FD_NAME 姓名

FD_EVENT 事件

FD_INTEGER 加多少分

DOC_CATEGORY_ID 所属类别

DOC_CREATE_TIME 创建时间

--本周积分增加或减少了多少

SELECT 
    D.FD_NAME,A.FD_LOGIN_NAME,A.IdoTotalVariation,B.IdoIncrement,C.IdoDecrement
FROM(
    --IDO积分总变化量
    SELECT FD_LOGIN_NAME,SUM(TO_NUMBER(fd_integer)) IdoTotalVariation
    FROM ido_grade_detail
    WHERE CAST(DOC_CREATE_TIME AS DATE) >= TRUNC(sysdate-7,'iw')
        AND CAST(DOC_CREATE_TIME AS DATE) < TRUNC(sysdate,'iw')
    GROUP BY FD_LOGIN_NAME
)A
LEFT JOIN(
    --IDO积分增长量
    SELECT FD_LOGIN_NAME,SUM(TO_NUMBER(fd_integer)) IdoIncrement
    FROM ido_grade_detail 
    WHERE TO_NUMBER(fd_integer) >0
        AND CAST(DOC_CREATE_TIME AS DATE) >= TRUNC(sysdate-7,'iw')
        AND CAST(DOC_CREATE_TIME AS DATE) < TRUNC(sysdate,'iw')
    GROUP BY FD_LOGIN_NAME
)B ON B.FD_LOGIN_NAME = A.FD_LOGIN_NAME
LEFT JOIN (
    --IDO积分减少量
    SELECT FD_LOGIN_NAME,SUM(TO_NUMBER(fd_integer)) IdoDecrement
    FROM ido_grade_detail 
    WHERE TO_NUMBER(fd_integer) <0
        AND CAST(DOC_CREATE_TIME AS DATE) >= TRUNC(sysdate-7,'iw')
        AND CAST(DOC_CREATE_TIME AS DATE) < TRUNC(sysdate,'iw')
    GROUP BY FD_LOGIN_NAME
)C ON C.FD_LOGIN_NAME = A.FD_LOGIN_NAME
LEFT JOIN SYS_ORG_ELEMENT D ON D.FD_NO = A.FD_LOGIN_NAME
WHERE A.FD_LOGIN_NAME = 'AY057490'

查询结果

不同表的字段放在同一行,也可用于求合集

 

SELECT 
    A.*,
    B.*
FROM A,B
WHERE A.ID = B.ID

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值