2011-04-15 68 views
0

我需要帮助通过与ITEM列中的值匹配的TRANS_CODE来查询不同记录的表。任何帮助将非常感激。MS Access查询显示与另一列中的值匹配的重复记录

下面是表格的一个例子。


ID TRANS_CODE ITEM 
1 CD50  Red 
2 TN30  Blue 
3 RC50  Green 
4 WC70  White 
5 PT30  Blue 
6 AB60  White 
7 RC50  Red 
8 WC70  Blue 
9 TN30  Green 
10 PT30  Green 

显示重复TRANS_CODE的逻辑由ITEM列驱动。复制TRANS_CODE的第一个逻辑是显示ITEM是蓝色,而SECORD是显示为绿色的ITEM。例如...

重复TRANS_CODE有项目,蓝色,绿色和红色:与蓝只
有项目重复TRANS_CODE,绿,红,白展记录:与青秀战绩仅为

结果应该会生成此列表....


ID TRANS_CODE ITEM 
1 CD50   Red 
2 TN30   Blue 
3 RC50  Green 
8 WC70   Blue 
5 PT30   Blue 
6 AB60   White 
+0

所以你想选择第一个唯一的'代码`由`ID`命令? – 2011-04-15 18:09:53

回答

0

您可以使用开关将您的颜色映射到数字。然后使用两个内联查询连接在一起,您可以得到您正在寻找的答案。

从技术上讲,你不需要使用开关,因为颜色是字母顺序,但以防万一你的真实值不

SELECT t.id, 
     t.transcode, 
     t.item 
FROM (SELECT transcode, 
       item, 
       id, 
       Switch([ITEM] = "Blue", 1, [ITEM] = "Green", 2, [ITEM] = "Red", 3 
       , 
       [ITEM] = 
       "White", 4) AS weight 
     FROM table2) AS t 
     INNER JOIN (SELECT transcode, 
          MIN(Switch([ITEM] = "Blue", 1, [ITEM] = "Green", 2, 
           [ITEM] = 
           "Red", 3, 
           [ITEM] = 
            "White", 4)) AS weight 
        FROM table2 
        GROUP BY transcode) AS t2 
     ON (t.weight = t2.weight) 
      AND (t.transcode = t2.transcode) 
ORDER BY t.id 

这列出了你的输出,我希望ID 8 6,而不是3和作品之间的5后被用于

id transcode item 
1 CD50 Red 
2 TN30 Blue 
3 RC50 Green 
5 PT30 Blue 
6 AB60 White 
8 WC70 Blue 

您注意:您可以FIRST(Switch...取代MIN(Switch...这可以提高性能

0

你应该试试这个:

select 
    (select ID from sometable as t2 where t2.trans_code = t1.trans_code and t2.item = Min(t1.Item)), 
    t1.trans_code, 
    Min(t1.item) 
from sometable as t1 
group by trans_code 
order by 1 

由于您没有指定颜色应该有偏爱,我的偏好设置按字母顺序(蓝,绿,红,白)。这是我可以从您的预期产出中捕获的帽子。

相关问题