SSIS - 将表A中的2条记录转换为表B中的1条记录

时间:2016-07-13 12:51:34

标签: sql-server ssis

我在员工表A中有以下数据:

ID  | emp | City_Type  | City
1   | 101 | Z          | Tokyo
2   | 101 | Y          | New York

City_Type可以是Y或Z.Y是这个人出生的城市,Z是他/她现在居住的城市。 我需要把它们放在一个表'B'中,看起来像下面这样:

ID  | emp | Current_City  | Birth_City

所以最后,表B必须像这样填充:

ID  | emp | Current_City  | Birth_City
1   | 101 | Tokyo         | New York

(在某些情况下,2中的一个可以为空/ null)

有关如何执行此操作的任何建议?我自己也找不到太多关于此的信息。

3 个答案:

答案 0 :(得分:1)

我使用PIVOT TABLE进行了练习(使用sql-server):

select emp, Z 'Current_City'   , Y 'Birth_City' from 
(
  select  emp,City_Type, City from  TABLE__A

) x
pivot
(
max(City) FOR City_Type in (Z,Y)
) AS PivotTable

低于获得的结果,其中示例为Current_City

字段的NULL值
emp Current_City    Birth_City
101 Tokyo           New York
102 NULL            London

我省略了ID,从请求中不清楚是否需要添加(最小值,最大值为emp,或者是新计算的还是由于TABLE__B中的INSERT)

此前一个查询可用于插入TABLE__B

INSERT INTO [TABLE__B]
           ([emp]
           ,[Current_City]
           ,[Birth_City])
...

答案 1 :(得分:1)

首先创建你的TableB并用空值填充[Current_City]和[Birth_City],但要确保[emp]在那里并且它包含你想要修改的所有员工。

然后运行此SQL修改以适合您的数据库/模式/表名/ etc:

update TableB
set Current_City = (select City
                    from TableA
                    where TableA.City_Type ='Z'
                    and TableA.emp = TableB.emp),
Birth_City = (select City
              from TableA
              where TableA.City_Type ='Y'
              and TableA.emp = TableB.emp)

答案 2 :(得分:0)

一种方法是使用PIVOT转换。