Подсчет имен с разными идентификаторами в SQL - PullRequest
0 голосов
/ 10 июня 2019

Я написал код, который должен подсчитывать мне имена, которые встречаются в моей колонке несколько раз

Вот что представляет каждый столбец:

col1 = Ids (float, null)
col2 = names (nvarchar(255), null)
col3 = region (nvarchar(255), null)
col4 = end_date (datetime, null)

В каждой таблице есть col2, поэтому я могу связать их.

Вот код, который я написал:

SELECT DISTINCT T.col1, T2.col2, T2.col3, col4
FROM tab1 AS T
INNER JOIN tab2 AS T2 ON T.col2=T2.col2
WHERE col2 IN 
    (SELECT [col2] FROM [tab1] GROUP BY [col2] HAVING COUNT(*) > 1)
    AND T.col4 IS NULL
ORDER BY T.col2 ASC

В принципе, я почти получаю желаемый результат, но мне чего-то не хватает в моем коде. Мне нужны только значения в col2, содержащие одно и то же имя, чтобы я мог их подсчитать и изолировать. Я пытался использовать функцию COUNT в своем операторе SELECT , но не получил ожидаемого результата. Я не уверен, но я полагаю, что это может быть тип данных, который может исказить счет.

Вот пример текущих результатов, которые я получаю:

col1        col2    col3    col4
1222222222  Bus1    NY      NULL
1333333333  Bus2    NY      NULL
1444444444  Bus3    NY      NULL
1555555555  Bus4    NY      NULL
1666666666  Bus4    NY      NULL
1777777777  Bus5    NY      NULL 

Вот то, чего я ожидаю и надеюсь достичь:

col1        col2    col3    col4
1555555555  Bus4    NY      NULL
1666666666  Bus4    NY      NULL

Любая помощь будет принята с благодарностью, спасибо!

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Предполагая, что col1 уникален, вы можете использовать EXISTS:

select t.* from tab1 t
where exists (
  select 1 from tab1
  where col1 <> t.col1 and col2 = t.col2
)
0 голосов
/ 10 июня 2019

Что вы ищете, чтобы выполнить внутреннее соединение самой таблицы.

SELECT a.col1, a.col2, a.col3, a.col4
FROM test a
INNER JOIN test b ON a.col2 = b.col2
WHERE a.col1 <> b.col1

Я проверил это здесь, и он возвращает то, что вы хотите: Посмотрите: http://www.sqlfiddle.com/#!9/cdb4df/37

...