2014-01-29 24 views
0

我有一個表格,其中包含以下列:Netting_Pool,Counterparty和Account。我的目標是運行SQL查詢以顯示Netting_Pool具有多於1個對手方的時間,並顯示鏈接到這些對手方的帳戶。在COUNT DISTINCT查詢中包含其他列

一個例子:

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 

我想查詢有以下收益:

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

到目前爲止最接近我來是這樣的:

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

其中返回:

Netting_Pool, Count (distinct Counterparty) 

1    2 

我還沒有能夠將交易方或賬戶值併入我的查詢,並讓它產生我想要的結果。任何幫助將非常感激!

+0

添加您的數據庫標記:mysql,sql server,other? – Mihai

+0

您使用的是Oracle嗎? –

+0

我相信我在使用Oracle。 – 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; 
相關問題