MSAccess查询以针对数据表中的条件列表进行搜索

时间:2018-11-09 13:23:06

标签: sql ms-access

我正在尝试为产品建立一些折扣清单。我有一个包含条件的主表:

<div class="container">

  <div class="rotate">
    <div class="text">we are on a
      <div class="fit-text">mission</div>
    </div>
  </div>

  <div class="rotate">
    <div class="text">we are on a<br/>mission</div>
  </div>
</div>

我要执行的查询是这样的:

ID  Connection  Class           Discount
1   (B OR F)    150             0.1
2   B           (600 OR 900)    0.2
3   F           (1500 OR 2500)  0.3
4   (C OR F)    4500            0.25

以上示例应返回第2行。该如何完成?我是否需要以其他方式格式化我的条件?我已经尝试过此示例,但无法获得所需的结果。想法是建立多列约束,并根据选择的配置,将范围缩小到适用的正确折扣。

请告诉我是否有解决此问题的简便方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

正如@Minty在评论中所说-您的数据未规范化。如果要拆分ConnectionClass,以便它们仅包含一个值,则可以轻松地将数据拉回。

| ID | Connection | Class | Discount |
|----|------------|-------|----------|
| 1  | B          | 150   | 0.1      |
| 1  | F          | 150   | 0.1      |
| 2  | B          | 600   | 0.2      |
| 2  | B          | 900   | 0.2      |
| 3  | F          | 1500  | 0.3      |
| 3  | F          | 2500  | 0.3      |
| 4  | C          | 4500  | 0.25     |
| 4  | F          | 4500  | 0.25     | 

此SQL将返回0.2:

SELECT  Discount
FROM    Constraints
WHERE   Class = 600  

我希望您必须引入Connection,因为类本身会带回重复的记录(除非您根据示例数据按Discount进行分组)。

所以:

SELECT  Discount
FROM    Table2
WHERE   Connection = 'B' AND Class = 600  

SELECT  Discount
FROM    Table2
WHERE   Class = 150
GROUP BY Discount  

编辑:< ID, Connection, Class >可以组成表中的复合Primary Key

答案 1 :(得分:0)

“类”列是什么数据类型。如果是数字,请尝试以下查询:

SELECT Constraints.Discount
FROM Constraints
WHERE [Class] = 600

'600'是一个包含3个字符600的字符串常量,这与数值600不同。