2012-07-06 60 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