Нужен SQL для поиска записей с повторяющимися значениями в отдельных столбцах - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть довольно простая таблица, которая выглядит примерно так:

CID     ID2     ID3     ID4
001     002     002     002
002     003     003     003
003     003     010     010
004     099     080     080
005     100     080     081
006     101     043     009
007     017     013     009
008     092     012     009

Я пытаюсь написать запрос SQL (в настоящее время в MS Access, но я должен иметь возможность принять все, что угодно), который идентифицирует все значения в CID, где любое из значений в ID2, ID3 или ID4 повторяется в своем собственном столбце и связанный счетчик повторных значений. Я могу сделать это довольно легко с одним столбцом, но я слишком большой нуб, чтобы понять, как получить то, что они повторяют в разных столбцах.

Мой ожидаемый результат из таблицы выше:

CID     Count
002     2
003     2
004     2
005     2
006     3
007     3
008     3

CID 002 и 003 имеют один и тот же ID2, CID 004 и 005 имеют один и тот же ID3, а CID 006, 007 и 008 имеют один и тот же ID4.

Пока что я сделал это, и это работает, чтобы получить счет только из ID2:

SELECT tbl.CID, Count(*) AS COUNTIDs FROM tbl GROUP BY tbl.ID2 HAVING Count(*)>1;

Спасибо за внимание и вашу помощь!

1 Ответ

0 голосов
/ 05 ноября 2018

Я основываю свой ответ на SQL Server. Вы должны ОТКЛЮЧИТЬ свой стол. Таким образом, у вас будут все столбцы в виде строк. Тогда ваш последний запрос будет иметь желаемый результат.

Проблема в том, что Access не имеет этой функции. Тогда вам нужно сделать это:

SELECT my_col
INTO tbl
FROM (
    SELECT CID as my_col
    FROM TABLE
         UNION
    SELECT ID2 as my_col     
    FROM TABLE
         UNION
    SELECT ID3 as my_col
    FROM TABLE
         UNION
    SELECT ID4 as my_col
    FROM TABLE
) as auxiliar

И ваш запрос покажет вам результат:

SELECT tbl.my_col, Count(*) AS COUNTIDs 
FROM tbl 
GROUP BY tbl.my_col 
HAVING Count(*)>1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...