2016-04-25 12 views
0

私はTerradata SQLを作成しています。私はカウントと他の変数と重複フィールドを取得したいと思います。私はカウントを得る方法しか見つけることができませんが、正確に変数を得ることはできません。SQL:他の変数と一緒に重複する行を取得する

利用可能な入力

+---------+----------+----------------------+ 
    | id  | name  |  Date  | 
    +---------+----------+----------------------+ 
    | 1  | abc  |   21.03.2015 | 
    | 1  | def  |   22.04.2015 | 
    | 2  | ajk  |   22.03.2015 | 
    | 3  | ghi  |   23.03.2015 | 
    | 3  | ghi  |   23.03.2015 | 

予想される出力:私は重複がIDでとすることを決めているすべての重複行、探しています

+---------+----------+----------------------+ 
    | id  | name  |  count   | // Other fields 
    +---------+----------+----------------------+ 
    | 1  | abc  |   2   | 
    | 1  | def  |   2   | 
    | 2  | ajk  |   1   | 
    | 3  | ghi  |   2   | 
    | 3  | ghi  |   2   | 

は、私が何を探しています重複行も検索します。

私が今まで持っているすべてがある:これは、正しいデータが表示されない

SELECT 
    id, name, other-variables, COUNT(*) 
FROM 
    Table_NAME 
GROUP BY 
    id, name 
HAVING 
    COUNT(*) > 1 

。ありがとうございました。上記に、あなたは簡素化することができISO SQL構文へのTeradata拡張機能を使用して

SELECT * 
FROM (
     SELECT id, name, other-variables, 
       COUNT(*) OVER (PARTITION BY id) AS duplicates 
     FROM users 
     ) AS sub 
WHERE duplicates > 1 

+0

期待した結果が、あなたの試行で選択している列と一致しません。あなたが実際に得ようとしているものを提供してください。 –

+0

追加属性なしで重複をカウントするクエリがある場合は、それをサブクエリに配置し、それを外部クエリに結合します。外部クエリには、必要な追加属性も取り込むことができます。 – HoneyBadger

+0

@TomH:申し訳ありませんが、以前はリンクで見つかったクエリを貼り付けてクエリを修正しました。ありがとうございました。 :-) –

答えて

2

あなたはこのようなwindow aggregate functionを、使用することができ、

SELECT id, name, other-variables, 
     COUNT(*) OVER (PARTITION BY id) AS duplicates 
FROM users 
QUALIFY duplicates > 1 
+0

答えをありがとう、これは働いているようです。唯一のことは、select id、decrypt_funct(name)、その他の変数などの関数を使用するため、名前は暗号化されているということです。私がこれをすると、うまくいきません。エラー:派生テーブル内のすべての式に明示的な名前が必要です。ありがとうございました。 :-) –

+0

計算カラムの後ろにエイリアスを追加するだけです: 'decrypt_funct(name)as mycol' – trincot

+0

まあ私はdecrypt_funct(name)を" mm "として追加しました。ありがとう –

0

これを試してみてください

SELECT 
    id, COUNT(id) 
FROM 
    Table_NAME 
GROUP BY 
    id 
HAVING 
    COUNT(id) > 1 
+0

名前を表示していません。除外された結果には3つの列があります – Kason

+0

ランダムなコードを貼り付けるのではなく、あなたが何をしたのか、その理由を説明してください。そうすれば、同じ問題を抱えているOPや将来の読者は、実際にそれをコピーして貼り付けるのではなく、明日も同じ質問をするだけで、あなたの答えから何かを実際に学ぶことができます。 – Oldskool

1

受け入れられた完全に正しい回答の代わりに、次のものを使用できます。

SELECT   {all your required 'variables' (they are not variables, but attributes)} 
,    cnt.Count_Dups 
FROM   Table_NAME TN 
INNER JOIN  (
        SELECT id 
        ,  COUNT(1) Count_Dups 
        GROUP BY id 
        HAVING COUNT(1) > 1 -- If you want only duplicates 
       ) cnt 
      ON cnt.id = TN.id 

編集:あなたの編集によると、重複が唯一idです。それに応じて私のクエリを編集しました。

+0

SQL Serverはこの問題に関与していません。タグ 'teradata'を参照してください。 – trincot

+0

@trincot、編集回答。私はテラデータをまったく知らないが、これはまだ機能するはずだ、と思うだろう – HoneyBadger

関連する問題