SQL insert into select from - 插入id而不是数据

时间:2016-01-27 07:38:05

标签: mysql sql oracle fact-table

我需要使用lds_placement表中的数据填充我的事实表。我选择了记录,这就是它的样子:

fk1_account_id | fk3_job_role_id | salary | no_of_placements |  YEAR
---------------------------------------------------------------------
     10        |        3        | 165000 |        5         |  2010
     10        |        3        | 132000 |        4         |  2011
     10        |        3        | 132000 |        4         |  2012
     20        |        2        | 990000 |        3         |  2010
     20        |        2        | 132000 |        2         |  2011
     20        |        2        | 132000 |        2         |  2012    

我想将time_id从名为time_dim的其他表格中插入year列,而不是实际的年份。

time_dim表如下所示:

time_id | year
---------------
   5    | 2015
   1    | 2013
   2    | 2010
   3    | 2014
   4    | 2012
   6    | 2011

我需要插入"年"列实际上是:

year
 2
 6
 4
 2
 6
 4

请告诉我在表格中插入time_id代替year的方法。 这是我用来选择最顶层表格的代码。

SELECT
     fk1_account_id,
     fk3_job_role_id,
     Sum(actual_salary)                             AS salary,
     Count(1)                                       AS no_of_placements,
     MAX(EXTRACT(YEAR FROM plt_estimated_end_date)) AS year
  FROM lds_placement
 GROUP BY fk1_account_id, fk3_job_role_id, EXTRACT(YEAR FROM plt_estimated_end_date)
 ORDER BY fk1_account_id;

1 个答案:

答案 0 :(得分:1)

如果要捕获left join中不存在year的记录,请使用time_dim。否则使用inner_join

select t.fk1_account_id,t.fk3_job_role_id,t.salary,t.no_of_placements
,d.time_id 
from 
(SELECT fk1_account_id, fk3_job_role_id, Sum(actual_salary) as salary, Count(1) as no_of_placements, MAX(EXTRACT(YEAR FROM plt_estimated_end_date)) AS YEAR 
FROM lds_placement
GROUP BY fk1_account_id, fk3_job_role_id, EXTRACT(YEAR FROM plt_estimated_end_date)
)t
left join time_dim d
on t.year=d.year
order by t.fk1_account_id