问题描述
|
我需要帮助来通过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为蓝色,而第二条为show
ITEM是绿色。例如...
具有ITEM,蓝色,绿色和红色的TRANS_CODE重复:仅显示蓝色记录
重复的TRANS_CODE具有ITEM,绿色,红色和白色:仅显示绿色记录
结果应生成此列表。
ID TRANS_CODE ITEM
1 CD50 Red
2 TN30 Blue
3 RC50 Green
8 WC70 Blue
5 PT30 Blue
6 AB60 White
解决方法
您可以使用开关将颜色映射到数字。然后,使用将两个内联查询结合在一起,您可以获得所需的答案。
从技术上讲,您不需要使用此开关,因为颜色是按字母顺序排列的,但以防万一您的实际值不是
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\",[ITEM] =
\"Red\",[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...
,以提高性能
,您应该尝试这样:
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
由于您没有指定哪种颜色应该具有首选项,因此我按字母顺序设置了首选项(蓝色,绿色,红色和白色)。我可以从您的预期输出中捕捉到那顶帽子。