查找多列值等于另一列的记录

时间:2012-09-12 22:00:06

标签: sql ms-access

我的表的重要部分是成员的唯一标识符,日期,主要项目类型标识符以及三种备选项目类型标识符中的任何一种。

我要做的是找到记录,其中任何替代项目类型标识符在稍后的同一个人的主要项目类型标识符列中结束。这是一个示例表:

+-------------------------------------------------------+
|NAME|DATE   |MAIN ITEM|ALT ITEM 1|ALT ITEM 2|ALT ITEM 3|
+-------------------------------------------------------+
|John|9/11/12|  12345  |  99999   |  88888   |  77777   |
+-------------------------------------------------------+
|John|9/12/12|  99999  |  66666   |  55555   |  44444   |
+-------------------------------------------------------+

我需要在这里找到像第二个这样的记录,这个记录比这个人的另一个更晚,并且之前是该特定人的替代项目。我所在的表有大约1700条记录,其中大约300条是一个人的倍数。

如果无法通过Access SQL完成解决方案,我可以使用VBA。谢谢。

1 个答案:

答案 0 :(得分:5)

怎么样:

SELECT u1.NAME, u1.Date, u1.[MAIN ITEM], u2.NAME, u2.Date, u2.ITEM
FROM (
    SELECT Test.NAME, Test.DATE, Test.[MAIN ITEM]
    FROM Test)  AS u1 
INNER JOIN (
    SELECT Test.NAME, Test.DATE, Test.[ALT ITEM 1]  As Item
    FROM Test
    UNION ALL
    SELECT Test.NAME, Test.DATE, Test.[ALT ITEM 2] As Item
    FROM Test
    UNION ALL
    SELECT Test.NAME, Test.DATE, Test.[ALT ITEM 3] As Item
    FROM Test)  AS u2 
ON (u1.NAME = u2.NAME) AND (u1.[MAIN ITEM] = u2.[ITEM])
WHERE u1.Date>u2.date

我打过桌面测试。