2015-06-22 103 views
1

我试图从一个表中检索数据,然后将其插入另一个表中。 这是包含以下数据的第一个表格的示例。 tb1是由数据组成的表格。经理和TeamLeader两个栏目基本上是指例如:Josh由Vik管理,等等。员工也可以成为另一位雇主的经理。例如,Josh是Nirvan和Deva的经理。从一个表中检索数据并插入到另一个表中

+---------+-------------+ 
|  tbl1   | 
+---------+-------------+ 
| Manager | Employee | 
+---------+-------------+ 
| Vik  | Josh  | 
+---------+-------------+ 
| Vik  | Cindy  | 
+---------+-------------+ 
| Vik  | Alvin  | 
+---------+-------------+ 
| Vik  | Kim   | 
+---------+-------------+ 
| Josh | Nirvan  | 
+---------+-------------+ 
| Josh | Deva  | 
+---------+-------------+ 
| Cindy | Mervyn  | 
+---------+-------------+ 
| Nirvan | Reeta  | 
+---------+-------------+ 
| Nirvan | Zaki  | 
+---------+-------------+ 
| Nirvan | Sunny  | 
+---------+-------------+ 

我要的是插入另一个表中的所有这些记录有以下的列:ID(被设置为IDENTITY/AUTONUM),姓名(员工/经理的姓名),的ParentId(经理的这一个特定的员工必须报告)。 因此,例如, 我应该得到的那种东西:

ID Name ParentId 
1 Vik 0 
2 Josh 1 
3 Cindy 1 
4 Alvin 1 
5 Kim 1 
6 Nirvan 2 
7 Deva 2 
8 Mervyn 3 
9 Reeta 6 
10 Zaki 6 
11 Sunny 6 
我有困难可以得到正确的SQL从第一个表中检索该数据并将其插入到另一个表

+0

你有包含的parentid和经理的名字表? – phicon

+0

不,我只有第一个有数据的表。从那张桌子我必须填写第二张桌。第二个表中的parent_id基本上是第二个表中的ID本身。例如,由于维克没有经理必须报告给他,所以他的保证金为零。 josh,cindy,alvin和kim向Vik报告,因此他们的parentid是vik的ID,它是1 –

回答

1
INSERT INTO tbl2 (
    Name 
    ,parentId 
    ) 
SELECT DISTINCT manager 
    ,0 
FROM tbl1 
WHERE manager NOT IN (
     SELECT employee 
     FROM tbl1 
     ) 

INSERT INTO tbl2 
SELECT DISTINCT employee 
    ,0 
FROM tbl1 

UPDATE tbl2 
SET parentid = parent.id 
FROM tbl2 
INNER JOIN tbl1 ON tbl2.Name = tbl1.employee 
INNER JOIN tbl2 parent ON parent.Name= tbl1.manager 
+0

名称插入有点令人困惑,但是否则需要解释为什么需要这种方法。例如:这需要分两步进行;您需要首先插入名称以获取唯一的ID –

+0

感谢队友:)完美地工作 –

2

你必须分两步做。一个来创建你所有的ID字段。然后,你可以用这个表连接到匹配的员工找到经理,经理的ID:

insert into MyNewTable (Name, ParentID) 
select Manager, ParentID 
from tbl1 
union 
select Employee, ParentID 
from tbl1 

update MyNewTable 
set MyNewTable.ParentId = Managers.Id 
from MyNewTable 
join tbl1 
on tbl1.Employee = MyNewTable.Name 
join MyNewTable Managers 
on MyNewTable.Name = Managers.Manager 
0
create table #tbl1 (manager char(15), employee char(15)) 

create table #tbl2 (ID int identity(1,1), Name char(15), ParentID int) 

insert into #tbl1 
values ('Vik', 'Josh') , 
('Vik'  , 'Cindy') , 
('Vik'  , 'Alvin') , 
('Vik'  , 'Kim') , 
('Josh' , 'Nirvan'), 
('Josh' , 'Deva') , 
('Cindy' ,'Mervyn') , 
('Nirvan' , 'Reeta'), 
('Nirvan' , 'Zaki'), 
('Nirvan' , 'Sunny') 

--- big Boss 
insert into #tbl2(Name, ParentID) 
SELECT DISTINCT manager, 0 
FROM #tbl1 
WHERE manager NOT IN (SELECT employee FROM #tbl1 ) 

--- Grab all Employees (Name) 
insert into #tbl2(Name) 
select distinct employee from #tbl1 

--- Update ParentID 
declare @StructureLevl int = 3 -- 0 1 2 3 Do something to figure out this number first 
declare @Var_int int = 0 
while (@Var_int < @StructureLevl) 
begin 
    update #tbl2 
    set ParentID= @Var_int +1 
    where Name in (select A.employee 
        from #tbl1 A inner join #tbl2 B on A.manager = B.Name 
        where B.ParentID = @Var_int) 

    set @Var_int +=1 
end 

select * from #tbl2 
order by ParentID 
相关问题