2012-07-06 61 views
0

检索我有一个扭曲的典型问题。识别表格数据从

我需要修改以下T SQL查询。目前它只能在一张表中查找信息。我需要查看两个具有相同列信息的表格。一个表包含当前员工和一个包含前雇员

SELECT t.net_Id 
     ,e.fname 
     ,e.lname 
FROM tblTrackingEmployee t 
    join view_employee e 
     on e.net_id = t.net_id 
where trackingid = @trackingId 
and empType = @empType 

我在想什么做的是使用工会都看。一名员工要么出现在一张桌子上,要么出现在另一张桌子上,而不会出现在两者中。

SELECT t.net_Id 
     ,e.fname 
     ,e.lname 
FROM tblTrackingEmployee t 
    JOIN view_employee e 
     ON e.net_id = t.net_id 
WHERE trackingid = @trackingId 
AND empType = @empType 
union 
SELECT t.net_Id 
     ,fe.fname 
     ,fe.lname 
FROM tblTrackingEmployee t 
     JOIN view_employee fe 
      ON fe.net_id = t.net_id 
WHERE trackingid = @trackingId 
AND empType = @empType 

但是,这里是扭曲的,我需要知道,如果返回的人是现任或前雇员。有没有办法向返回的表中添加一列,如果其当前员工为1,或者如果是前雇员,则为0?每个trackingId都可能包含这两种类型的员工。

回答

2

添加常数列各SELECT条款 - 你可以别名它:

SELECT t.net_Id 
     ,e.fname 
     ,e.lname 
     ,'Current' AS Type 
FROM tblTrackingEmployee t 
    JOIN view_employee e 
     ON e.net_id = t.net_id 
WHERE trackingid = @trackingId 
AND empType = @empType 
union 
SELECT t.net_Id 
     ,fe.fname 
     ,fe.lname 
     ,'Former' 
FROM tblTrackingEmployee t 
     JOIN view_formerEmployee fe 
      ON fe.net_id = t.net_id 
WHERE trackingid = @trackingId 
AND empType = @empType 
+0

当我加入“类型”我回来了两倍的结果。一组与当前和一个与前者相同 – Mike 2012-07-06 20:35:30

+0

@Mike - 这很奇怪。你是否也加入了'前'行? – Oded 2012-07-06 20:37:46

+0

我发现了这个错误。当我把代码放好后,我忘记了第二个view'view_formerEmployee fe'你写的方式没有我的拼写错误。谢谢! – Mike 2012-07-06 20:42:54

1

让我得到这个直,你有两个表,一个拥有在职员工有一个前雇员?这已经是一个糟糕的主意了,你可能已经拥有一张状态为“Active”/“Inactive”的表格。在任何情况下只需添加一个字段,就像一个int,要每个查询

SELECT 
0 AS TheField, 
    .... 
FROM 
    Table 
UNION ALL 
SELECT 
1 AS TheField, 
... 
FROM 
    table 
+0

我会补充说,而不是只是活动/不活动,有一个或两个显示日期员工开始并完成,完成日期为空,如果他们是活跃的,有很多排列在此 – Harv 2012-07-06 20:39:46

+0

感谢您的建议,但不幸的是,表格不是我的改变,我只需要与他们设置的工作 – Mike 2012-07-06 20:45:44

1

您还可以排序的状态,如果你想:

SELECT U.* FROM 
(
    SELECT t.net_Id AS ID 
     ,e.fname AS FName 
     ,e.lname AS LName 
     ,'Current' AS EmployStatus 
    FROM tblTrackingEmployee t 
     JOIN view_employee e 
      ON e.net_id = t.net_id 
    WHERE trackingid = @trackingId 
    AND empType = @empType 
    union 
    SELECT t.net_Id AS ID 
     ,fe.fname AS FName 
     ,fe.lname AS LName 
     ,'Former' AS EmployStatus 
    FROM tblTrackingEmployee t 
     JOIN view_formerEmployee fe 
       ON fe.net_id = t.net_id 
    WHERE trackingid = @trackingId 
    AND empType = @empType 
) AS U 
ORDER BY U.EmployStatus 
+0

当我添加'EmployStatus'这一行时,我得到两倍的结果,一组与当前和一个与前者相同 – Mike 2012-07-06 20:35:59

+0

您的表在两个SELECTS中都是相同的(tblTrackingEmployee)我不知道表“Former”employees。您需要编辑您的问题 – 2012-07-06 20:38:23

+0

我实际上只是发现了自己的错误,修正了它的问题,但我正在选择自从他首先发布他的解决方案以来,@Oded就是答案。我非常感谢大家的快速响应! – Mike 2012-07-06 20:44:32