oracle 简单方式连接,在oracle中,我们怎么能做这样一个简单的连接呢?

本文介绍了如何通过SQL查询将多个表格(学生、等级和登记)联接成一个结果表,同时展示了如何在不使用UNION的情况下实现这一操作。进一步讨论了如何结合日期表来计算用户在特定时间段内的注册状态,为用户未注册的周数提供统计。这涉及到数据联接、日期处理和用户活动分析。
摘要由CSDN通过智能技术生成

我们怎么能这样做一个简单的连接呢?

我有三张桌子:

表1:

学生

UserID

11111111111

22222222222

33333333333

44444444444

55555555555

66666666666

77777777777

88888888888

99999999999

表2:

等级

ClassID | StartDate

0001 | Apr 2,2018, 9:00 AM

0002 | May 2,2018, 9:00 AM

表3:

登记

UserID | ClassID

11111111111 | 0001

11111111111 | 0002

22222222222 | 0001

33333333333 | 0002

因此我需要下面的桌子:

需要的表

UserID | ClassID | StartDate

11111111111 | 0001 | Apr 2,2018, 9:00 AM

11111111111 | 0002 | May 2,2018, 9:00 AM

22222222222 | 0001 | Apr 2,2018, 9:00 AM

33333333333 | 0002 | May 2,2018, 9:00 AM

44444444444 | null | null

55555555555 | null | null

66666666666 | null | null

77777777777 | null | null

88888888888 | null | null

99999999999 | null | null

如果可能的话,不用

UNION

是的。

进一步编辑

表3:

登记

(带有新的“EnrollStatus”列)

UserID | ClassID | EnrollStatus

11111111111 | 0001 | Enrolled

11111111111 | 0002 | Enrolled

22222222222 | 0001 | Enrolled

33333333333 | 0002 | Enrolled

需要的表

(带有新的“EnrollStatus”列)

UserID | ClassID | StartDate | EnrollStatus

11111111111 | 0001 | Apr 2,2018, 9:00 AM | Enrolled

11111111111 | 0002 | May 2,2018, 9:00 AM | Enrolled

22222222222 | 0001 | Apr 2,2018, 9:00 AM | Enrolled

22222222222 | null | null | null

33333333333 | null | null | null

33333333333 | 0002 | May 2,2018, 9:00 AM | Enrolled

44444444444 | null | null | null

44444444444 | null | null | null

55555555555 | null | null | null

55555555555 | null | null | null

66666666666 | null | null | null

66666666666 | null | null | null

77777777777 | null | null | null

77777777777 | null | null | null

88888888888 | null | null | null

88888888888 | null | null | null

99999999999 | null | null | null

99999999999 | null | null | null

我相信这种加入是必要的,因为我有另一个表(进一步)与日期的一年,我需要计算多少周用户没有注册在一个特定的时期(过滤器)。此外,需要显示用户未注册的周数(按用户)。

WITH DATES AS

(

SELECT DATE '2017-12-25' + LEVEL -1 dt FROM DUAL CONNECT BY LEVEL <= 500

)

SELECT dt,TO_CHAR(dt,'DY') DAY,TO_CHAR(dt,'WW') WW,TO_CHAR(dt,'IW') IW,

CASE WHEN TO_CHAR(dt,'D')

LPAD(TO_CHAR(dt,'WW')+1,2,'0')

ELSE

TO_CHAR(dt,'WW')

END MY

FROM dates

查询结果

DT | DAY | WW | IW | MY

Dec 25, 2017, 3:00 AM | MON | 52 | 52 | 52

Dec 26, 2017, 3:00 AM | TUE | 52 | 52 | 52

Dec 27, 2017, 3:00 AM | WED | 52 | 52 | 52

Dec 28, 2017, 3:00 AM | THU | 52 | 52 | 52

Dec 29, 2017, 3:00 AM | FRI | 52 | 52 | 52

Jan 1, 2018, 3:00 AM | MON | 01 | 01 | 01

Jan 2, 2018, 3:00 AM | TUE | 01 | 01 | 01

Jan 3, 2018, 3:00 AM | WED | 01 | 01 | 01

Jan 4, 2018, 3:00 AM | THU | 01 | 01 | 01

Jan 5, 2018, 3:00 AM | FRI | 01 | 01 | 01

Jan 8, 2018, 3:00 AM | MON | 02 | 02 | 02

Jan 9, 2018, 3:00 AM | TUE | 02 | 02 | 02

Jan 10, 2018, 3:00 AM | WED | 02 | 02 | 02

Jan 11, 2018, 3:00 AM | THU | 02 | 02 | 02

Jan 12, 2018, 3:00 AM | FRI | 02 | 02 | 02

Jan 15, 2018, 3:00 AM | MON | 03 | 03 | 03

Jan 16, 2018, 3:00 AM | TUE | 03 | 03 | 03

Jan 17, 2018, 3:00 AM | WED | 03 | 03 | 03

Jan 18, 2018, 3:00 AM | THU | 03 | 03 | 03

Jan 19, 2018, 3:00 AM | FRI | 03 | 03 | 03

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值