Oracle 如何显示在特定日期加入的员工列表

Oracle 如何显示在特定日期加入的员工列表,oracle,oracle11g,oracle10g,oracle12c,Oracle,Oracle11g,Oracle10g,Oracle12c,我有一个表EMPLOYEE,其中包含如下数据: EID JOB JOINING_DATE ------ ---- ----------- 1 SE 2015-01-01 00:00:00.0 2 SW 2015-01-02 00:00:00.0 3 SD 2015-01-03 00:00:00.0 4 SX

我有一个表
EMPLOYEE
,其中包含如下数据:

EID       JOB          JOINING_DATE
------    ----          -----------
1          SE         2015-01-01 00:00:00.0
2          SW         2015-01-02 00:00:00.0
3          SD         2015-01-03 00:00:00.0
4          SX         2015-01-04 00:00:00.0
5          SP         2015-01-05 00:00:00.0
6          SV         2015-01-06 00:00:00.0
7          SM         2015-01-07 00:00:00.0
8          SE         2015-01-04 00:00:00.0
9          SW         2015-01-03 00:00:00.0
10         SD         2015-01-01 00:00:00.0
11         SX         2015-01-03 00:00:00.0
12         SP         2015-01-03 00:00:00.0
13         SV         2015-01-02 00:00:00.0
8          SE         2015-01-04 00:00:00.0
9          SW         2015-01-03 00:00:00.0
10         SD         2015-01-01 00:00:00.0
11         SX         2015-01-03 00:00:00.0
12         SP         2015-01-03 00:00:00.0
13         SV         2015-01-02 00:00:00.0
EID     JOB    01-01-15   02-01-15    03-01-15
1        SE      1         0             0
2        SW      0         0             0
.
.
.
13       SV      0         2             0
我需要这样输出:

EID       JOB          JOINING_DATE
------    ----          -----------
1          SE         2015-01-01 00:00:00.0
2          SW         2015-01-02 00:00:00.0
3          SD         2015-01-03 00:00:00.0
4          SX         2015-01-04 00:00:00.0
5          SP         2015-01-05 00:00:00.0
6          SV         2015-01-06 00:00:00.0
7          SM         2015-01-07 00:00:00.0
8          SE         2015-01-04 00:00:00.0
9          SW         2015-01-03 00:00:00.0
10         SD         2015-01-01 00:00:00.0
11         SX         2015-01-03 00:00:00.0
12         SP         2015-01-03 00:00:00.0
13         SV         2015-01-02 00:00:00.0
8          SE         2015-01-04 00:00:00.0
9          SW         2015-01-03 00:00:00.0
10         SD         2015-01-01 00:00:00.0
11         SX         2015-01-03 00:00:00.0
12         SP         2015-01-03 00:00:00.0
13         SV         2015-01-02 00:00:00.0
EID     JOB    01-01-15   02-01-15    03-01-15
1        SE      1         0             0
2        SW      0         0             0
.
.
.
13       SV      0         2             0

如何做到这一点?

请注意以下几点

  • 列名不应以数字开头
  • 在输入数据中,您提到了7个不同的日期,但在输出数据中,您只提到了3个
  • 我假设eid和作业对于不同的员工是相同的,否则您的逻辑将失败

        with tbl1 as(
        select emp.*,
          case when joining_date = to_date('2015-01-01','YYYY-MM-DD') then 1 else 0 end as date_01_01_15,
          case when joining_date = to_date('2015-01-02','YYYY-MM-DD') then 1 else 0 end as date_02_01_15,
          case when joining_date = to_date('2015-01-03','YYYY-MM-DD') then 1 else 0 end as date_03_01_15
        from EMPLOYEE emp) 
    
        select tbl1.eid, tbl1.job,
            sum(date_01_01_15) as date_01_01_15,
            sum(date_02_01_15) as date_02_01_15,
            sum(date_03_01_15) as date_03_01_15 
        from tbl1
        group by tbl1.eid,tbl1.job
    
  • 注:我采用的日期格式为YYYY-MM-DD。您可以根据您的日期格式进行更改。 您还可以扩展case和sum语句来添加其他列