2017-09-07 65 views
0

[ExactReplica] [FilteredOpportunityProduct表與鮮明MAX(列值)選擇行

Opportunityid  baseamount 
1     500 
1     500 
2     600 
2     700 

[ExactReplica] .FilteredOpportunity表

Opportunityid name 
1    ABC 
2    CDF 

我想利用的最大baseamount。然而,現在面臨的問題時,存在着baseamount的重複,我怎麼可以只有一條記錄

我的查詢

select 
    MaxAmount.[baseamount] , 
    c.name 


FROM [ExactReplica].FilteredOpportunity c 

Left JOIN 
     (
      SELECT opportunityid, 
        MAX((baseamount)) baseamount 
      FROM [ExactReplica].[FilteredOpportunityProduct] 
      GROUP BY opportunityid 

     ) MaxAmount ON c.opportunityid = MaxAmount.opportunityid 
    inner JOIN 
     [ExactReplica].[FilteredOpportunityProduct] p ON MaxAmount.opportunityid = p.opportunityid 
        AND MaxAmount.baseamount = p.baseamount 
+0

請看看這個鏈接瞭解更多關於如何提高的問題:HTTPS://spaghettidba.com/2015/04/24/how -to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

+0

你的預期結果是什麼? –

+0

1.你的例子中的'inner join'是多餘的 2.你的請求中不喜歡什麼? –

回答

1

試試這個:

select max(baseamount) baseamount,a.name 
from 
(select 
    baseamount, ROW_NUMBER() over (partition by p.opportunityid,baseamount order by p.baseamount desc) rn, 
    c.name 

FROM FilteredOpportunity c 
    inner JOIN 
     [FilteredOpportunityProduct] p ON c.opportunityid = p.opportunityid) a 
     where rn=1 
     group by a.name 

OUTPUT:

baseamount name 
500   ABC 
700   CDF 
-1

你可以試試以下查詢預期水庫ULT,我已經執行了下面的腳本:

對於表創建:

CREATE TABLE FILTEREDOPPORTUNITYPRODUCT( OPPORTUNITYID INT NULL, BASEAMOUNT VARCHAR(24)NULL )

CREATE TABLE FILTEREDOPPORTUNITY( OPPORTUNITYID INT NULL, NAME VARCHAR(24)NULL )

插入:

INSERT INTO FILTEREDOPPORTUNITYPRODUCT(OPPORTUNITYID,BASEAMOUNT)VALUES (1500),(1500),(2600),(2700)

INSERT INTO FILTEREDOPPORTUNITY(OPPORTUNITYID,NAME)VALUES (1, 'ABC'),( 2, 'CDF')

選擇:

SELECT A.OPPORTUNITYID,B.NAME,MAX(BASEAMOUNT)AS BASEAMOUNT FROM FILTEREDOPPORTUNITYPRODUCT AS甲
JOIN FILTEREDOPPORTUNITY AS乙
ON A.OPPOR TUNITYID = B.OPPORTUNITYID GROUP BY A.OPPORTUNITYID,B.NAME