0

以下に示すように、Table1 という名前のテーブルがあります。

ID  AccountNo     Trn_cd
1   123456           P
2   123456           R
3   123456           P
4   12345            P
5   111              R
6   111              R
7   5625             P

accountNo が複数回 (重複) 表示され、trn_cd に少なくとも P と R の両方があるレコードを表示したいと思います。

この場合、出力は次のようになります。

ID  AccountNo     Trn_cd
1   123456           P
2   123456           R
3   123456           P

私はこのSQLを実行しましたが、私が望む結果ではありません:

select * from Table1 
where AccountNo IN 
(select accountno from table1 
where trn_cd = 'P' or trn_cd = 'R' 
group by AccountNo having count(*) > 1) 

111 の trn_cd P がないため、AccountNo 111 は表示されません。

ID  AccountNo   Trn_cd
1   123456        P
2   123456        R
3   123456        P
5   111           R
6   111           R

何か案が?

4

2 に答える 2

1

これには集計を使用します。口座番号を取得するには:

select accountNo
from table1
having count(*) > 1 and
       sum(case when trn_cd = 'P' then 1 else 0 end) > 0 and
       sum(case when trn_cd = 'N' then 1 else 0 end) > 0

アカウント情報を取得するには、joinorinステートメントを使用します。

select t.*
from table1 t
where t.accountno in (select accountNo
                      from table1
                      having count(*) > 1 and
                             sum(case when trn_cd = 'P' then 1 else 0 end) > 0 and
                             sum(case when trn_cd = 'N' then 1 else 0 end) > 0
                     )
于 2013-03-27T15:36:24.853 に答える
0

この問題は と呼ばれRelational Divisionます。

これは、 を含むレコードをフィルタリングしてP、返さRれたレコードごとにカウントし、AccountNoを使用して再度フィルタリングすることで解決できますCOUNT(DISTINCT Trn_CD) = 2

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  AccountNo
            FROM    TableName
            WHERE   Trn_CD IN ('P','R')
            GROUP   BY AccountNo
            HAVING  COUNT(DISTINCT Trn_CD) = 2
        ) b ON a.AccountNO = b.AccountNo

出力

╔════╦═══════════╦════════╗
║ ID ║ ACCOUNTNO ║ TRN_CD ║
╠════╬═══════════╬════════╣
║  1 ║    123456 ║ P      ║
║  2 ║    123456 ║ R      ║
║  3 ║    123456 ║ P      ║
╚════╩═══════════╩════════╝

INDEXパフォーマンスを高速化するには、 on columnを追加しますAccountNo

于 2013-03-27T15:34:16.877 に答える