2016-04-28 2 views
0

Это мой первый вопрос, и я действительно не знал, какие критерии поиска использовать.Отображение дополнительных данных на основе итоговых результатов

В любом случае, у меня есть запрос ниже, чтобы показать, какие идентификаторы учетных записей дублируются в таблице и сколько раз. Также в этой таблице есть другие поля, такие как firstName, lastname, dob и т. Д. Я хочу иметь возможность отображать эти данные на основе результатов этого запроса. Любая помощь для начинающего SQL оценивается, спасибо!

SELECT accountid, COUNT(AccountId) as Count 
from accounts 
where RelationshipCode = 'SB' 
group by AccountId 
HAVING COUNT(AccountId)>1 
order by AccountId 
+0

Вы пытались просто добавить их в выбранную часть? –

+0

Являются ли firstName, lastname, dob и т. Д. Всегда одинаковыми для учетной записи? Если это так, просто добавьте эти столбцы для выбора списка и предложения group by. – jarlh

+0

Какие СУБД вы используете? MySQL, SQL Server, Oracle, ...? Вы всегда должны указывать СУБД при запросе SQL-запросов. SQL-диалекты различаются, и то, что работает для одной СУБД, может не работать для другого. –

ответ

0
select acc.*, 
     sub.count 
from account acc 
    inner join (SELECT accountid, COUNT(AccountId) as Count 
       from accounts 
       where RelationshipCode = 'SB' 
       group by AccountId 
       HAVING COUNT(AccountId)>1) sub on sub.accountid=acc.accountid 
order by acc.AccountId 

Как это? Получить все учетные записи, которые дублируются?

0
SELECT accountid, firstName, lastname,dob, COUNT(*) as Count ` 
FROM accounts ` 
WHERE RelationshipCode = 'SB' ` 
GROUP BY AccountId,firstName, lastname,dob ` 
HAVING COUNT(*)>1 ` 
ORDER BY AccountId` 
+0

Привет, я пробовал это, но это будет работать только в том случае, если имя, имя и доб тоже были одинаковыми (что я не смог объяснить не) –

0

Таблица счетов с дублирующимися идентификаторами учетной записи? К сожалению, сколько стоит идентификатор? Вы делаете все правильно, чтобы искать дубликаты. Удалите их и сделайте идентификатор уникальным (возможно, сделав его основным ключом таблицы).

Ваш запрос уже получает идентификаторы аккаунта, чтобы вы могли использовать их, чтобы выбрать из снова таблицы:

select * 
from accounts 
where accountid in 
( 
    select accountid 
    from accounts 
    where relationshipcode = 'SB' 
    group by accountid 
    having count(*) > 1 
) 
order by accountid; 

Альтернативой является использование аналитической версии COUNT так, чтобы читать таблица только один раз:

select * 
from 
(
    select accounts.*, count(*) over (partition by accountid) as cnt 
    from accounts 
    where relationshipcode = 'SB' 
) counted 
where cnt > 1 
order by accountid; 
Смежные вопросы