2017-10-27 21 views
-2

ための複数の行を有する:COUNT項目は、表2は、私は2つのテーブルを以下た同じアイテム

表1:トランザクションIDによってリスト取引(主キー)。トランザクションごとに常に1つの行があります。

表2:トランザクションID(外部キー)別のトランザクションを一覧表示し、特定の支払いが行われた期間をトランザクションごとに示します。したがって、1つのトランザクション(同じトランザクションID)では、各支払日に複数の行が存在する可能性があります。

2つのテーブルをトランザクションIDで結合し、トランザクション数を数えると、同じトランザクション(同じトランザクションID)の複数の行がTable1に表示されるため、トランザクションは正しくカウントされません。私はWHERE条件があるとして、表2に参加する必要がある

COUNTトランザクションIDが同じである場合、それはまだ、それぞれの行をカウントするようDISCTINCT、この場合には動作しませんが、支払日が異なる

、どのテーブル1にはありません

どのように私は正しくトランザクションを数えることができますか?

+2

質問を編集し、サンプルデータと希望する結果を提供してください。 –

+0

DISCTINCTとは何ですか? DISTINCTを意味しますか? –

+0

申し訳ありませんが、私は意味しています – Skywalker

答えて

3

DISTINCTが機能します - カウントの個別の修飾子INSIDEを入れてフィールドを指定するだけです。

select count(distinct table1.transactionid) from table1 join table2 on(table1.transactionid = table2.transactionid); 

これは、合計数が1行になります。複数の行を返す必要がある場合は、目的に合わせてgroup by句を追加する必要があります。グループ化する必要がなく、table2からすべての行を返す場合は、count(distinct table1.transactionid) over()のようなanalytics/window関数を使用する必要があります。異なるトランザクションの総数と結果を最初に知りたい場合は、2つの選択を行うだけです。

+1

あなたはおそらく 'を使用して' 'あなたがおそらく' table1.transactionid'を使用することはできません – winkbrace

+0

あなたが月ごとに異なるpayment_dateのような列を追加すると、 select count(distinct table1.tran_id)、table2.payment_date ここでtable1.tran_id = table2.tran_id この場合3行が表示されます... – Skywalker

+0

どのような結果が期待されますか?列に別の値を付けてグループに追加してください。もちろん、私が提案した選択とは異なる結果が得られます。あなたはどうしたらいいのですか?マヌー行? 1列?どの列にトランザクション数が必要ですか? –

0

なぜあなたはまったく参加しますか?あなたが必要とするすべての情報がtable2にあるようです。例:

select count(distinct transaction_id) 
from table2 
where payment_date >= date '2017-01-01'; 
関連する問題