返回基于多个条件 SQL、MS Access 的非不同行

Posted

技术标签:

【中文标题】返回基于多个条件 SQL、MS Access 的非不同行【英文标题】:Returning non-distinct rows based on multiple criteria SQL, MS Access 【发布时间】:2018-05-02 21:31:49 【问题描述】:

我有一个名为 MASTER 的表,它是从另一个来源导入的。它包含以下字段: 场 A、场 B、场 C、场 D、场 E、场 F、场 G、场 H、场 I、场 J 和场 K

我正在尝试设计一个查询,该查询将返回首先FIELD D 不是DISTINCT 的每个实例。我希望返回所有多次出现的记录。然后从那里,在那个集合中,我想返回对于每个不同的 FIELD D 记录,FIELD I 有多个结果的所有内容。

FIELD D 本质上是一个数字公钥。 FIELD I 是一个数字状态码。目标是扫描一个公钥上附加了两个状态码的任何情况。

以下是我迄今为止的最佳尝试。它确实返回了我想要的集合,但是还返回了一些额外的公钥。谁能指出我正确的方向?

SELECT DISTINCT PREP1.FIELD_D, PREP1.FIELD_I
FROM (SELECT [MASTER].FIELD_D AS FIELD_D, [MASTER].FIELD_I AS FIELD_I
    FROM [MASTER] GROUP BY [MASTER].FIELD_D, [MASTER].FIELD_I) AS
         PREP1 
INNER JOIN (SELECT [MASTER].FIELD_D AS FIELD_D, [MASTER].FIELD_I AS
              FIELD_I
            FROM [MASTER]
            GROUP BY [MASTER].FIELD_D, [MASTER].FIELD_I
            HAVING COUNT(*) > 1)  AS PREP2 ON PREP1.FIELD_D = 
                                     PREP2.FIELD_D
GROUP BY PREP1.FIELD_D, PREP1.FIELD_I

编辑:我做了这个小例子。 A 列和 B 列代表我将拥有的数据类型。 C 列列出了我想要返回的那些。你会注意到 A 列中有一个重复的例子,但是它们在 B 列中的相关值是相同的,所以我不需要这些。

<html>

<head>
  <style>
    table 
      font-family: arial, sans-serif;
      border-collapse: collapse;
      width: 100%;
    
    
    td,
    th 
      border: 1px solid #dddddd;
      text-align: left;
      padding: 8px;
    
    
    tr:nth-child(even) 
      background-color: #dddddd;
    
    </style>
    <body><table><tr><th>COLUMN A</th><th>COLUMN B</th><th>COLUMN C</th></tr><tr><td>00000000</td><td>0</td><td>""</td></tr><tr><td>00000000</td><td>0</td><td>""</td></tr><tr><td>00000001</td><td>1</td><td>""</td></tr><tr><td>00000002</td><td>1</td><td>RETURN</td></tr><tr><td>00000002</td><td>2</td><td>RETURN</td></tr><tr><td>00000003</td><td>1</td><td>""</td></tr><tr><td>00000004</td><td>1</td><td>""</td></tr><tr><td>00000004</td><td>1</td><td>""</td></tr><tr><td>00000005</td><td>3</td><td>""</td></tr><tr><td>00000006</td><td>3</td><td>""</td></tr><tr><td>00000007</td><td>0</td><td>""</td></tr><tr><td>00000008</td><td>0</td><td>""</td></tr><tr><td>00000009</td><td>1</td><td>RETURN</td></tr><tr><td>00000009</td><td>2</td><td>RETURN</td></tr><tr><td>00000010</td><td>0</td><td>""</td></tr></table></body></html>

【问题讨论】:

如果您提供一些示例数据和预期结果,可能会更容易提供有价值的答案。 我会删除有过滤器并将计数字段作为列包含在您内部连接的子查询中,然后过滤掉外部查询 如果您运行代码 sn-p,我已经包含了一个示例表。另外,Daniel,要么我不理解你,要么它对我没有用。 【参考方案1】:

这就是最终的工作。希望这是有道理的。

SELECT MASTER.FIELDA, MASTER.FIELDB, MASTER.FIELDC, MASTER.FIELDD, MASTER.FIELDF
FROM (
[MASTER] AS MASTER 
INNER JOIN (
    SELECT PREP1.FIELDD, COUNT(PREP1.FIELDD) AS [COUNT] 
    FROM (
        SELECT FIELDD, FIELDF 
        FROM [MASTER] 
        INNER JOIN FILTER ON [MASTER].FIELDB =
             FILTER.FIELDB 
        GROUP BY FIELDD, FIELDF) AS PREP1 
    )  GROUP BY FIELDD ) AS PREP2 ON MASTER.FIELDD = PREP2.FIELDD
INNER JOIN FILTER ON MASTER.FIELDB = tblSAClients.FundSponsor
WHERE (((PREP2.COUNT)>1))
ORDER BY MASTER.FIELDD DESC;

【讨论】:

以上是关于返回基于多个条件 SQL、MS Access 的非不同行的主要内容,如果未能解决你的问题,请参考以下文章

MS Access SQL 多个 JOIN 和 WHERE 子句

查询在 iif ms-access sql 中不返回真值

MS Access VBA:基于查询结果的 VBA 命令

查询 MS Access 多个条件(where)

MS Access 子表单的多个分离条件

SQL MS Access查询的排除条件