2016-04-28 13 views
0

これは私の最初の質問です。使用する検索条件は実際にはわかりませんでした。集計結果に基づいて追加データを表示する

とにかく、どのaccountIDがテーブルに複製されているか、何回表示されているかを以下のクエリで確認しました。このテーブルには、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

accountidのfirstName、lastname、dobなどは常に同じですか?もしそうなら、それらの列をselectリストとgroup by節に追加するだけです。 – jarlh

+0

あなたはどんなDBMSを使用していますか? MySQL、SQL Server、Oracle、...? SQLの質問をするときは、常にDBMSにタグを付ける必要があります。 SQLの方言が異なり、1つのDBMSで動作するものが別のDBMSで動作しないことがあります。 –

答えて

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

こんにちは、これを試しましたが、これはfirstname、lastname、dobもすべて同じです(これは説明できませんでしたそうではない) –

0

重複するアカウントIDを持つアカウントテーブルはありますか?おっと、IDはどれくらいの価値がありますか?あなたは重複を探す権利をしています。それらを削除し、IDを一意にする(テーブルの主キーにするなど)。

あなたは再びテーブルから選択するためにそれらを使用することができますので、あなたのクエリはすでに、問題のアカウントIDを取得します。

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; 
関連する問題