2013-02-28 49 views
0

我需要帮助写SQL打印以下SQL查询员工表

表1:Emp_Master

Emp_ID FirstName 
------------------------------ 
1   John 
2   Mark 
3   Steve 

表2:Emp_Transaction

Trans ID Emp_ID Payment_Date Paid_status 
--------------------------------------------------------- 
1    1    01/07/13   True 
2    1    01/15/13   False 
3    1    01/21/13   False 
4    2    01/07/13   False 
5    2    01/15/13   False 
6    2    01/21/13   False 
7    3    01/07/13   True 
8    3    01/15/13   True 
9    3    01/21/13   False 

结果应打印像这样(最早的未付日期)

Emp_ID FirstName   Payment_Date  Paid_Status 
-------------------------------------------------------------- 
1    John     01/15/13   False 
2    Mark     01/07/13   False 
3    steve     01/21/13   Fals 

回答

1

尝试此查询

SELECT e.Emp_ID, e.FirstName, min(Payment_Date), et.Paid_Status 
FROM Emp_Master e, Emp_Transaction et 
WHERE e.Emp_ID = et.Emp_ID AND et.Paid_Status= 'False' 
GROUP BY e.Emp_ID, e.FirstName, et.Paid_Status 
+0

您应该使用显式连接符号。这也缺少paid_status – 2013-02-28 03:57:58

+0

它如何缺少paid_status?我没有得到你。 – Meherzad 2013-02-28 03:59:12

+0

它不在SELECT列表中? – 2013-02-28 03:59:56

0

试试

select model1.Emp_ID , 
     model1.FirstName , 
     min(model2.Payment_Date) , 
     model2.Paid_Status 
     from Emp_Master model1 ,Emp_Transaction model2 
     where model1.Emp_ID = model2.Emp_ID GROUP BY model1.Emp_ID, model2.FirstName; 
+0

你错过了在GROUP BY联接。您还应该使用明确的加入符号 – 2013-02-28 04:10:23

-1

您可以使用Join这个。

选择e.Emp_ID,e.FirstName,分钟(t.Payment_Date) t.Paid_status从Emp_Master E, Emp_Transaction t其中e.Emp_ID = t.Emp_ID和t.Paid_Status = '假';

+0

,这不会得到最低付款日期 – 2013-02-28 03:56:19

2

我过分复杂,我的第一个答案。这是你需要的。

SELECT Emp_Master.Emp_ID Emp_ID, FirstName, MIN(Payment_Date) Payment_Date, Paid_Status 
FROM Emp_Master 
INNER JOIN Emp_Transaction ON Emp_Master.Emp_ID = Emp_Transaction.Emp_ID 
WHERE Paid_Status = 'false' 
GROUP BY Emp_Master.Emp_ID, FirstName, Paid_Status 
+0

MIN(Payment_Date),其状态为false,不是吗? – 2013-02-28 03:51:18

+0

@SenJacob正确 - 修复了我的答案 – 2013-02-28 03:52:33