2017-05-26 2 views
0

Ich habe ein kleines Problem, dass ich nicht sicher bin, wie man eine Runde bekommen und hoffen, dass hier jemand helfen kann. Was ich tun muss, ist eine Auswahl für mehrere Datensätze ausführen und die letzten zwei Datensätze von p.CustID abrufen. Wenn Sie in eine p.CustID eingeben, funktioniert der Code gut, aber ich muss die WHERE-Klausel entfernen und ich brauche es die letzten zwei Datensätze für jede p.CustID (ca. 14.000 Datensätze insgesamt) abrufen Wenn ich die WHERE-Klausel entfernen, wird nur zurückgegeben zwei Datensätze insgesamt, die in der from-Anweisung [DB_User]. [dbo]. [P1ASellers] die beiden obersten Datensätze sind. Ich habe versucht, mit diesem in einem WAK aber immer noch nicht das Code kehre ich unten bin mit: SELECT TOP (2) cbc.StorePartnerCustConfigID, p.CustID, cbc.ConfigID, cbc.EffectiveDate, ROW_NUMBER() OVER (ORDER BY cbc.StorePartnerID DESC) AS RowNum FROM [DB_User].[dbo].[P1ASellers] p INNER JOIN [ACA].dbo.tblConfig_StorePartnerConfig BP ON BP.EntityID=CAST(p.CustID AS VARCHAR) INNER JOIN [ACA].dbo.tblConfig_StorePartner CBP ON CBP.StorePartnerID=BP.StorePartnerID INNER JOIN [ACA].dbo.tblConfig_StorePartnerCustConfig CBC ON CBP.StorePartnerID=CBC.StorePartnerID AND cbc.ProcessConfigID IN (1,2,3,4) INNER JOIN [ACA].dbo.tblConfig_StorePartnerCustConfig CBC2 ON CBC.StorePartnerID=CBC2.StorePartnerID AND cbc2.ConfigID IN (1,2,3,4) where p.CustID=55555 <-need to remove the where ORDER BY cbc.StorePartnerID DESCLetzte zwei Reihe von mehreren Aufzeichnungen Hilfe

Die Ergebnisse aus der Abfrage StorePartnerCustConfigID CustID ConfigID EffectiveDate rownum 15031 55555 4 2015.06.25 1 15032 55555 1 2015-06-25 2

Was ich tatsächlich bekommen, nachdem ich die where-Klausel entfernen: StorePartnerCustConfigID CustID ConfigID EffectiveDate rownum 68995 89566 2 2011-03-02 1 68996 89566 1 2011-03-02 2

, was ich erwarten, nachdem ich die where-Klausel zu entfernen: StorePartnerCustConfigID CustID ConfigID EffectiveDate rownum 15031 55555 4 2015-06-25 1 15032 55555 1 2015-06-25 2 64584 65486 2 2013-04-16 1 64585 65486 1 2013-04-16 2 So weiter und so weiter .......

Jeder Eingang sehr geschätzt, danke !!

Antwort

0

Ich glaube, Sie sind für die Top-2-Datensätze für jeden Kunden suchen, die Sie wie unten bekommen können:

SELECT TOP (2) with ties 
    cbc.StorePartnerCustConfigID, 
    p.CustID, 
    cbc.ConfigID, 
    cbc.EffectiveDate, 
    ROW_NUMBER() OVER (ORDER BY cbc.StorePartnerID DESC) AS RowNum 
FROM [DB_User].[dbo].[P1ASellers] p 
INNER JOIN [ACA].dbo.tblConfig_StorePartnerConfig BP 
    ON BP.EntityID=CAST(p.CustID AS VARCHAR) 
INNER JOIN [ACA].dbo.tblConfig_StorePartner CBP 
    ON CBP.StorePartnerID=BP.StorePartnerID 
INNER JOIN [ACA].dbo.tblConfig_StorePartnerCustConfig CBC 
    ON CBP.StorePartnerID=CBC.StorePartnerID 
    AND cbc.ProcessConfigID IN (1,2,3,4) 
INNER JOIN [ACA].dbo.tblConfig_StorePartnerCustConfig CBC2 
    ON CBC.StorePartnerID=CBC2.StorePartnerID 
    AND cbc2.ConfigID IN (1,2,3,4) 
ORDER (row_number() over(partition by p.CustId Order BY cbc.StorePartnerID DESC-1)/2 +1) 
Verwandte Themen