2014-01-29 3 views
0

Netting_Pool, Counterparty 및 Account 열이있는 테이블이 있습니다. 내 목표는 두 개 이상의 거래 상대방이있는 Netting_Pool이 있는지 보여주고 해당 거래 상대방에게 연결된 계정을 표시하는 SQL 쿼리를 실행하는 것입니다. COUNT DISTINCT 쿼리에 추가 열 포함

예 : I 쿼리는 다음과 같은 반환하고 싶은

Netting_Pool Counterparty Account 

     1 ----- A ----- ASD 
     1 ----- A ----- XYZ 
     1 ----- B ----- DEF 
     2 ----- C ----- YUI 
     3 ----- D ----- TRE 
     4 ----- E ----- DDW 
     5 ----- F ----- QWE 

:

SELECT netting_pool, count (distinct counterparty) 
FROM Table 
GROUP BY netting_pool 
HAVING count(distinct counterparty) > 1' 

: 지금까지 가장 가까운 내가 온

 1 ----- A ----- ASD 
     1 ----- A ----- XYZ 
     1 ----- B ----- DEF 

는 다음과 어느 것이 반환합니까 :

Netting_Pool, Count (distinct Counterparty) 

1    2 

거래처 또는 계정 값을 내 쿼리에 통합하여 원하는 결과를 얻을 수 없었습니다. 어떤 도움을 많이 주시면 감사하겠습니다!

+0

DB 태그를 추가하십시오 : mysql, sql server, other? – Mihai

+0

오라클을 사용하고 있습니까? –

+0

나는 오라클을 사용하고 있다고 믿는다. – user3250470

답변

1

쿼리가 집계되므로 한 행만 표시됩니다. 이를 수행하는 또 다른 방법은 모든 데이터베이스가 아닌 모든 데이터베이스에서 지원되는 창/분석 함수를 사용하는 것입니다.

불행히도 count(distinct)은 일반적으로 창 기능으로 지원되지 않습니다. 하지만 최대 값과 최소값을 살펴봄으로써이 문제를 해결할 수 있습니다 :

select Netting_Pool, Counterparty, Account 
from (select t.*, 
      min(account) over (partition by Netting_Pool) as mina, 
      max(account) over (partition by Netting_Pool) as maxa 
     from table t 
    ) t 
where mina <> maxa;