我的任务是创建一个查询,从今天开始提取员工信息。现在我有测试数据,为下面的每个条件返回一条记录。如果子查询返回多条记录怎么办?有没有更好的方法来写这个?
查询Employee_Master。
我需要显示名称,ID,类型和日期。
Type将成为case语句创建的列。
当Start_Date = Today_Date时,'NEW' Terminate_Date = Today_Date时'TERMINATED' 'EXTENDED'当Start_Date<> Today_Date和Terminate_Date<> Today_Date时,employee_reference表中存在相同的记录,代表今天的日期。 如果用户是'EXTENDED'并且存在于Name_Change表
中,则“NAME CHANGED”SELECT Name, ID, Date,
Type = CASE
WHEN Start_Date = Today_Date THEN 'NEW'
WHEN Terminate_Date = Today_Date THEN 'TERMINATED'
WHEN ID = (SELECT A.ID FROM Employee_Master AS A
INNER JOIN Employee_Reference AS B on B.ID = A.ID
WHERE DATE = GETDATE()) THEN 'EXTENDED'
WHEN ID = (SELECT A.ID FROM Employee_Master AS A
INNER JOIN Name_Change AS B ON B.ID = A.ID
WHERE Create_Date = GETDATE()) THEN 'Name Changed'
END
FROM Employee_Master
WHERE Today_Date = GETDATE()
答案 0 :(得分:0)
我不完全确定你的所有日期在子选择中的来源,因为它们没有别名,但概念上我会尝试:
@interface MyObject : NSObject
@property (nonatomic, readonly) NSNumber *hash;
@end
@implementation MyObject
@synthesize hash = _hash;
@end
基本上,这消除了employee_master中额外选择的ID,因为您已经从中进行选择,并从子选择中的目标表中选择最大日期。你只会以这种方式得到一个,如果它符合今天的日期,那么它将满足案例陈述。
请注意,上面假设您的原始查询获得了整个人口。但是,我怀疑您可能希望在FROM语句中实际包含employee_reference和name_change作为外连接,然后从WHERE语句中的当前日期过滤到所有内容 - 例如:
SELECT
Name,
ID,
Date,
Type = CASE
WHEN Start_Date = Today_Date THEN 'NEW'
WHEN Terminate_Date = Today_Date THEN 'TERMINATED'
WHEN (SELECT MAX(DATE)
FROM Employee_Reference ER on ER.ID = EM.ID) = GETDATE() THEN 'EXTENDED'
WHEN ID = (SELECT MAX(Create_Date)
FROM Name_Change AS NC ON NC.ID = EM.ID) = GETDATE() THEN 'Name Changed'
END
FROM Employee_Master EM
WHERE Today_Date = GETDATE()