【问题标题】:MS Access query displays duplicate record that matches value in another columnMS Access 查询显示与另一列中的值匹配的重复记录
【发布时间】:2011-04-15 18:07:20
【问题描述】:

我需要帮助来通过 TRANS_CODE 查询表以查找与 ITEM 列中的值匹配的不同记录。任何帮助将不胜感激。

这是一个表格的例子。


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  

【问题讨论】:

  • 所以你想选择第一个由ID排序的唯一Transcode
  • 那么没有蓝色或绿色的重复记录呢?

标签: sql


【解决方案1】:

您可以使用 switch 将颜色映射到 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...,这可能会提高性能

【讨论】:

    【解决方案2】:

    你应该试试这个:

    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
    

    由于您没有指定应该偏好哪种颜色,我按字母顺序设置偏好(蓝色、绿色、红色和白色)。这就是我可以从您的预期输出中捕捉到的帽子。

    【讨论】:

      猜你喜欢
      • 2020-02-22
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      相关资源
      最近更新 更多