如何显示不匹配的值?
问题描述:
使用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 ids for the date wise
预期输出
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
等等...,
需要查询帮助。
答
还没有执行,以验证是肯定的,但是这应该让你最那里的方式:
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”的值将是有效日期。
希望这会有所帮助。
答
不问你的数据模型,为了得到你想要的结果,你将需要第三个表(我将调用日期)你需要表1和日期的交叉连接,这将给所有员工的结果天。然后你需要左连接到EmpID和日期。 左连接将包含来自第一个连接的所有结果,但仅填充来自表2的匹配行。 Access在处理查询结构方面很有趣,它也不支持SQL-92的语法,但它看起来如下所示。
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;
Gopal你已经问过这样的问题:http://*.com/questions/1220659/how-to-display-all-ids-for-the-selected-date – mlevit 2009-08-03 05:52:27
@mlevit - 检查这个问题,这与那个不同。 – Gopal 2009-08-03 12:24:31