使用VB6和MS-ACCESS 2003
所以......,
表1
EMPID DATE
101 22-07-2009
201 22-07-2009
501 22-07-2009
301 23-07-2009
401 23-07-2009
501 23-07-2009
101 24-07-2009
501 24-07-2009
所以......,
从上表中我想显示两个表,以显示日期明确的所有EMP ID
预期产出
EMPID DATE
101 22-07-2009
201 22-07-2009
301
401
501 22-07-2009
101
201
301 23-07-2009
401 23-07-2009
501 23-07-2009
101 24-07-2009
201
301
401
501 24-07-2009
所以......,
需要查询帮助。
答案 0 :(得分:2)
在不询问您的数据模型的情况下,要获得您想要的结果,您将需要第三个表格(我将称之为日期)您需要表1和日期的交叉加入,这将给出所有员工的所有日子的结果。然后你需要左加入到EmpID和日期。
左连接将包括第一次连接的所有结果,但仅填充表2中的匹配行。 Access如何处理查询结构很有趣,它也不支持SQL-92 CROSS JOIN
语法,但它看起来如下所示。
SELECT t1.EmpID, t2.Date
FROM (
SELECT t1.EmpID, d.Date
FROM [Table 1] AS t1,
Dates AS d
) AS DT1
LEFT OUTER JOIN [Table 2] AS t2
ON DT1.EmpID = t2.EmpID
AND DT1.Date = t2.Date
ORDER
BY DT1.Date, DT1.EmpID;
答案 1 :(得分:2)
没有执行以确认无误,但这应该可以帮助你完成任务:
SELECT
AllPossibleCardEvents.PersonId,
AllPossibleCardEvents.EmpName,
AllPossibleCardEvents.TitleCode,
AllPossibleCardEvents.TitleName,
AllPossibleCardEvents.CardEventDate,
ActualCardEvents.CardEventDate AS MatchingCardEventDate
FROM
(
(
SELECT
p.PersonId,
p.EmpName,
p.TitleCode,
p.TitleName,
AllDates.CardEventDate
FROM
(SELECT DISTINCT CardEventDate FROM T_Cardevent) AllDates,
T_Person p
) AllPossibleCardEvents
LEFT OUTER JOIN T_Cardevent ActualCardEvents ON
AllPossibleCardEvents.PersonId = Actual.PersonId AND
AllPossibleCardEvents.CardEventDate = Actual.CardEventDate
)
对于非实际事件的记录,“MatchingCardEventDate”将为NULL。对于实际事件,“MatchingCardEventDate”的值将是有效日期。
希望这有帮助。