通过连接区域表,从Loc_hist表中获取每个分区的记录

时间:2016-01-12 09:39:25

标签: sql oracle11g

我有2个名为area和loc_hist的表。

在区域表中存在分区列表,并且在loc_hist分区中与其他3个号码组合并给出其他详细信息。 INPUT

区域

[yourTextField resignFirstResponder]

Loc_Hist

div div_name 
11    ATALANTA 
14    Columbo  

这里的Loc是(div的前2位数或其他列的最后3位数)。

输出

Item Loc  
0012 11378 
0013 11378 
0014 11378 
0015 14425 

所以我的问题是如何从每个部门的loc_hist表中获取记录? 提前致谢

3 个答案:

答案 0 :(得分:2)

这就是你在T-SQL中的表现方式

create table #area (div int, div_name nvarchar(20))
create table #Loc_hist (item nvarchar(10), Loc int)

insert into #area (div, div_name)
values
(11, 'ATALANTA'),
(14, 'Columbo')

insert into #loc_hist (Item, Loc)
values
('0012', 11378), 
('0013', 11378), 
('0014', 11378),
('0015', 14425) 

select ar.div, count(*) from #loc_hist lh
   join #area ar on LEFT(lh.loc,2) = ar.div
group by ar.div

答案 1 :(得分:2)

via:Oracle

   select t1.div,
          count(t2.Loc) as cnt
       from (select div,
              case when length(div)=2 
                   then div
                   when length(div)=3 
                   then substr(div,1,1)||substr(div,3,1)
                   else null end as dive
               from Area) t1
       left join Loc_hist t2
       on t1.dive = substr(t2.Loc,1,2)
    group by t1.div

现在你可以在3位div和2位div中得到它。但是如果你的div类型是int或者数字或者浮点数,你可能会遇到一些问题。在这种情况下,你只需转换情况然后部分它将是完成

像这样:

           (select div,
              case when length(div)=2 
                   then div
                   when length(div)=3 
                   then to_number(substr(div,1,1)||substr(div,3,1))
                   else null end as dive
               from Area) t1

或者您可以选择在连接条件中使用大小写时间来执行此部分。但我不建议

答案 2 :(得分:2)

这就是你在oracle中的表现方式

select a.div,count(*) from  area a 
inner join loc_hist b
on substr(a.div,1,2) = substr(b.loc,1,2)
group by a.div