我正在尝试从一个表中提取数据以添加到现有查询中。本质上,我只想带出PM和Supt名称,并将它们添加到具有相应员工ID的行中。下图中的表1和表2是我试图从中“合并”数据的2个表的示例,而表3是我希望得到的结果。
Table 1:
+--------+----------+
| Emp_ID | Emp_Name |
+--------+----------+
| 1111 | Bob |
+--------+----------+
| 2222 | Joe |
+--------+----------+
Table 2:
+------+------+
| PM | Supt |
+------+------+
| 1111 | 2222 |
+------+------+
| 1111 | 3333 |
+------+------+
Table 3 (Expected Result):
+------+------+---------+-----------+
| PM | Supt | PM_Name | Supt_Name |
+------+------+---------+-----------+
| 1111 | 2222 | Bob | Joe |
+------+------+---------+-----------+
| 1111 | | Bob | NULL |
+------+------+---------+-----------+
到目前为止,我已经能够通过左联接和case语句使员工姓名显示在正确的字段中,但是我得到了重复的行(每个名称实例一个)。我还包括了当前代码和示例结果集,以供参考。
SELECT
JUDF.Job_Number, JUDF.User_Def_Sequence, JUDF.Date_Field, JUDF.Company_Code, JUDF.Alpha_Field, JM.Original_Contract, JM2.Revised_Contract, JM.Job_Description, JM.Project_Manager, JM.Superintendent,
(CASE WHEN LTRIM(RTRIM(JM.Project_Manager)) = LTRIM(RTRIM(ECL.Employee_Code)) THEN ECL.Employee_Name END) AS PM_Name, (CASE WHEN LTRIM(RTRIM(JM.Superintendent)) = LTRIM(RTRIM(ECL.Employee_Code))
THEN ECL.Employee_Name END) AS Supt_Name
FROM dbo.JC_JOB_MASTER_MC AS JM INNER JOIN
dbo.JC_JOB_USER_FIELDS_DET_MC AS JUDF WITH (NOLOCK) ON JM.Company_Code = JUDF.Company_Code AND JM.Job_Number = JUDF.Job_Number INNER JOIN
dbo.JC_JOB_MASTER2_MC AS JM2 WITH (NOLOCK) ON JM.Company_Code = JM2.Company_Code AND JM.Job_Number = JM2.Job_Number LEFT OUTER JOIN
dbo.Z_EMPLOYEE_CODE_LIST AS ECL WITH (NOLOCK) ON LTRIM(RTRIM(JM.Project_Manager)) = LTRIM(RTRIM(ECL.Employee_Code)) OR
LTRIM(RTRIM(JM.Superintendent)) = LTRIM(RTRIM(ECL.Employee_Code))
+------------+--------------+------------+--------------+-------------+-------------------+------------------+-----------------+-----------------+----------------+---------+-----------+
| Job_Number | User_Def_Seq | Date_Field | Company_Code | Alpha_Field | Original_Contract | Revised_Contract | Job_Description | Project_Manager | Superintendent | PM_Name | Supt_Name |
+------------+--------------+------------+--------------+-------------+-------------------+------------------+-----------------+-----------------+----------------+---------+-----------+
| 12345 | 001 | NULL | ABC | NULL | 12345 | 12345 | Test | 1111 | 2222 | Bob | NULL |
+------------+--------------+------------+--------------+-------------+-------------------+------------------+-----------------+-----------------+----------------+---------+-----------+
| 12345 | 001 | NULL | ABC | NULL | 12345 | 12345 | Test | 1111 | 2222 | NULL | Joe |
+------------+--------------+------------+--------------+-------------+-------------------+------------------+-----------------+-----------------+----------------+---------+-----------+
答案 0 :(得分:0)
您需要两次加入ECL表。一次用于PM,一次用于SUPTS。尝试对OR
使用单个联接将导致重复的行带有NULL。
答案 1 :(得分:0)
SELECT ID
,MONTH(TransactionDate) AS Month
,SUM(Amount) AS Amount
FROM Table1
WHERE TransactionDate BETWEEN '20170101' AND '20171231'
GROUP BY ID, Month
HAVING MIN(Amount) > 0
ORDER BY ID, Month
;
从table2 c左连接中选择a.empid,b.empid,a.empname和b.empnam pm = a.empid上的table1 a左连接supt = b.empid上的table2 b
答案 2 :(得分:0)
def __str__(self):
return '%s %s' % (self.first_name, self.last_name)