2017-09-07 1 views
0

[ExactReplica] [FilteredOpportunityProduct] Tableauligne Sélectionner avec Distinct (valeur de la colonne) max

Opportunityid  baseamount 
1     500 
1     500 
2     600 
2     700 

[ExactReplica] .FilteredOpportunity Tableau

Opportunityid name 
1    ABC 
2    CDF 

Je veux prendre la baseamount maximale. Cependant, je suis face à problème quand il existe double du baseamount, comment puis-je prendre un seul enregistrement

Ma Recherche

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

veuillez jeter un oeil à ce lien pour en savoir plus sur la façon d'améliorer la question: https: //spaghettidba.com/2015/04/24/how -to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

+0

Quel est votre résultat attendu? –

+0

1. 'jointure interne 'dans votre exemple est redondant 2. ce que vous n'aimez pas dans votre demande? –

Répondre

1

Essayez ceci:

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 

SORTIE:

baseamount name 
500   ABC 
700   CDF 
-1

Pouvez-vous essayer ci-dessous la requête pour attendu res ULT, je l'ai exécuté les scripts ci-dessous:

Pour le tableau Création:

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

CREATE TABLE FILTEREDOPPORTUNITY ( opportunityid INT NULL, NOM VARCHAR (24) NULL )

insertion:

INSERT INTO FILTEREDOPPORTUNITYPRODUCT (opportunityid, BASEAMOUNT) VALEURS (1500), (1500), (2600), (2.700)

INSERT INTO FILTEREDOPPORTUNITY (opportunityid, NOM) Valeurs (1, 'ABC'), (2 'CDF')

Sélection:

SELECT A.OPPORTUNITYID, B.NAME, MAX (BASEAMOUNT) AS BASEAMOUNT DE FILTEREDOPPORTUNITYPRODUCT COMME
INSCRIPTION FILTEREDOPPORTUNITY AS B
ON A.OPPOR TUNITYID = B.OPPORTUNITYID GROUPE PAR A.OPPORTUNITYID, B.NAME