Возврат непонятных строк на основе нескольких критериев SQL, MS Access - PullRequest
0 голосов
/ 03 мая 2018

У меня есть таблица MASTER, импортированная из другого источника. Содержит эти поля: ПОЛЕ A, ПОЛЕ B, ПОЛЕ C, ПОЛЕ D, ПОЛЕ E, ПОЛЕ F, ПОЛЕ G, ПОЛЕ H, ПОЛЕ I, ПОЛЕ J, и ПОЛЕ K

Я пытаюсь сконструировать запрос, который будет возвращать каждый экземпляр, где в первую очередь FIELD D НЕ DISTINCT. Я хочу, чтобы все записи, которые встречались более одного раза, возвращались. Затем оттуда, в этом наборе, я хочу вернуть все, где для каждой отдельной записи ПОЛЯ D есть несколько результатов для ПОЛЯ I.

ПОЛЕ D - это по сути числовой открытый ключ. ПОЛЕ 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>

1 Ответ

0 голосов
/ 04 мая 2018

Это то, что сработало. Надеюсь, это имеет смысл.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...