从DB2中的4个表中加入数据,并添加一个新列,用于标识记录来自哪个表

时间:2014-12-29 19:01:11

标签: sql db2 ibm-db2

我有四张桌子

收费, 地点, 教研室, 工作

每一个都有3个列 EmpId,Code,Date。

每个表中的一些记录对于该表是唯一的,而一些记录存在于多个表中。

我希望所有数据在一个表中没有重复,并且还应该有一个新列,其中包含记录所在表的名称

所以我们的最终数据将是

#Sr.no------------EmpID----------Code------Date----------Tables in which the record exists
1.--------------- E001 --------- C1 ------ 1 Feb 2014 ---------------- Pay, Department
2.--------------- E002 --------- C2 ------ 2 Jan 2014 ---------------- Location 
3.--------------- E003 --------- C3 ------ 3 Mar 2014 ---------------- Job
4.--------------- E004 --------- C4 ------ 4 Jan 2014 ---------------- Location, Pay 
5.--------------- E005 --------- C5 ------ 6 Mar 2014 ---------------- Dept, Job 
6.--------------- E006 --------- C6 ------ 3 Feb 2014 ---------------- Pay, Job, Location 
7.--------------- E007 --------- C7 ------ 2 Aug 2014 ---------------- Pay, Dept, Job, Loc 
8.--------------- E008 --------- C8 ----- 19 sep 2014 ---------------- Department 
9.--------------- E009 --------- C9 ----- 22 dec 2014 ---------------- Pay, Dept, Job, Loc

1 个答案:

答案 0 :(得分:2)

使用Union all组合不同表格的结果,并使用其他列来区分行。

之后使用ListAgg功能groupduplicate行转换为comma separated values。试试这个。

SELECT EmpId,Code,Date,Listagg(Tablename,',') within GROUP (ORDER BY empid) AS Tablename 
FROM   (SELECT EmpId,Code,Date,'Pay' AS Tablename
        FROM   Pay
        UNION ALL
        SELECT EmpId,Code,Date,'Location' AS Tablename
        FROM   Location
        UNION ALL
        SELECT EmpId,Code,Date,'deparment' AS Tablename
        FROM   deparment
        UNION ALL
        SELECT EmpId,Code,Date,'job' AS Tablename
        FROM   job) A
GROUP  BY EmpId,Code,Date 

ListAgganswer

引用的功能