2013-12-12 72 views
0

我有2代表在微軟的Access兩個表中的記錄如何從使用的MS Access查詢

  1. tbl_Master_Employess
  2. tbl_Emp_Salary

我要顯示在鏈接的員工表中的所有員工與員工薪水錶 鏈接兩個表中的ID是coluqEmpID在這兩個表中

在第二個表中,我有一個日期列。我需要一個查詢,應使用一個特定的日期

我嘗試下面的查詢獲取兩個表中的記錄:

select coluqEID as EmployeeID , colEName as EmployeeName,"" as Type, "" as Amt 
from tbl_Master_Employee 
union Select b.coluqEID as EmployeeID, b.colEName as EmployeeName, colType as Type, colAmount as Amt 
     from tbl_Emp_Salary a, tbl_Master_Employee b 
     where a.coluqEID = b.coluqEID and a.colDate = #12/09/2013# 

然而,它顯示了重複。

Query4

EmployeeID EmployeeName Type Amt 
1   LAKSHMANAN  
1   LAKSHMANAN  Advance 100 
2   PONRAJ  
2   PONRAJ   Advance 200 
3   VIJAYAN  
4   THIRUPATHI  
5   VIJAYAKUMAR  
6   GOVINDAN   
7   TAMILMANI  
8   SELVAM  
9   ANAMALAI   
10   KUMARAN 

我怎麼會重寫我的查詢,以避免重複,或者這將是一個不同的方式來展現不重複?

回答

0

您的查詢的問題在於,當您想要的是聯接時,您正在使用聯合。工會首先要列出所有員工的第一部分:

select coluqEID as EmployeeID , colEName as EmployeeName,"" as Type, "" as Amt from tbl_Master_Employee

,然後添加到列表中的所有員工的記錄,他們有一個特定的日期工資。

Select b.coluqEID as EmployeeID, b.colEName as EmployeeName, colType as Type, 
colAmount as Amt 
from tbl_Emp_Salary a, tbl_Master_Employee b 
where a.coluqEID = b.coluqEID and a.colDate = #12/09/2013# 

您的目標是獲取所有員工的列表,並只顯示那些有特定日期的工資信息?一些示例數據會很有用。假設數據在這裏:SQL Fiddle這個查詢應該創建你想要的。

Select a.coluqEID as EmployeeID, colEName as EmployeeName, 
     b.colType as Type, b.colAmount as Amt 
FROM tbl_Master_Employees as a 
LEFT JOIN (select coluqEID, colType, colAmount FROM tbl_EMP_Salary 
      where colDate = '20130912') as b ON a.coluqEID = b.coluqEID; 

第一步是創建一個選擇,讓您獲得按日期計算的工資。然後您可以對此執行連接,就好像您在執行單獨的查詢一樣。您使用LEFT JOIN是因爲您需要來自一方的所有記錄,員工以及僅來自第二方的與您的標準相匹配的記錄(即您的薪水)。

+0

非常感謝,它工作正常 – mcbalaji

0

我相信你會需要一個連接,但是你的問題上唯一的名字。

select **DISTINCT** coluqEID as EmployeeID 

添加distinct操作符只會給出唯一返回的結果。