MS Access查询显示与另一列中的值匹配的重复记录

时间:2011-04-15 18:07:20

标签: sql

我需要帮助查询表,以查找与ITEM列中的值匹配的TRANS_CODE的不同记录。任何帮助都会非常感激。

以下是该表的示例。


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:仅显示蓝色的记录 具有ITEM,绿色,红色和白色的重复TRANS_CODE:仅显示绿色显示记录

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


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

2 个答案:

答案 0 :(得分:0)

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

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

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

注意:您可以将MIN(Switch...替换为FIRST(Switch...,这可能会提高效果

答案 1 :(得分: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

由于您没有指定哪种颜色应该优先,我按字母顺序设置首选项(蓝色,绿色,红色和白色)。我可以从你的预期输出中捕获。