简体   繁体   English

根据多个条件返回不明显的行SQL,MS Access

[英]Returning non-distinct rows based on multiple criteria SQL, MS Access

I have a table called MASTER that is imported from another source. 我有一个名为MASTER的表,该表是从另一个来源导入的。 It contains these fields: FIELD A, FIELD B, FIELD C, FIELD D, FIELD E, FIELD F, FIELD G, FIELD H, FIELD I, FIELD J, and FIELD K 它包含以下字段:字段A,字段B,字段C,字段D,字段E,字段F,字段G,字段H,字段I,字段J和字段K

I'm trying to design a query that will return every instance where first, FIELD D is NOT DISTINCT. 我正在尝试设计一个查询,该查询将返回每个实例(首先是FIELD D NOT DISTINCT)。 I want all records that occur more than once returned. 我希望出现的所有记录均不止一次返回。 Then from there, in that set, I want to return everything where, for each distinct FIELD D record, there are multiple results for FIELD I. 然后从那里开始,在那个集合中,我想返回所有对于每个不同的FIELD D记录都有多个FIELD I结果的地方。

FIELD D is essentially a numeric public key. FIELD D本质上是一个数字公钥。 FIELD I is a numeric status code. FIELD I是数字状态代码。 The goal is to scan for any case where there are two status codes attached to one public key. 目标是在一个公钥上附有两个状态代码的情况下进行扫描。

Below is my best attempt so far. 以下是我迄今为止的最佳尝试。 It does return the set I want, but there are some additional public keys that are returned. 它确实返回了我想要的集合,但是还返回了一些其他的公共密钥。 Can anyone point me in the right direction? 谁能指出我正确的方向?

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

EDIT: I whipped up this little example. 编辑:我鞭打了这个小例子。 Columns A and B represent the type of data I will have. A和B列代表我将拥有的数据类型。 Column C lists the ones I want returned. C列列出了我要返回的内容。 You will notice that there is an example of duplicates in Column A, but their related value in Column B is the same, so I don't need those. 您会注意到,在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> 

This is what ended up working. 这就是最终的工作。 Hopefully it makes sense. 希望这是有道理的。

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM