2016-10-24 7 views
-2
gruppiert zu bekommen

Ich habe diese Ergebnisse:SQL-Abfrage eine Summe von Werten von einer anderen Spalte

enter image description here

Die Abfrage, die ich zur Zeit bin mit ist:

SELECT TOP 1000 [FundReportLoanDataID] 
     ,[SegAmortisation] 
     ,frlc.FundReportCategoryId, 
     SUM(CurrentLB) AS '% of Fund' 
    FROM [dbo].[FundReportLoanData] frld 
    INNER JOIN [dbo].[FundReportCategories] frlc 
    ON frld.SegAmortisation = frlc.Description 
    group by frlc.FundReportCategoryId, frld.SegAmortisation, frld.FundReportLoanDataID, frld.LoanId, frld.CurrentLB 

Wie Sie sehen können, obwohl Ich gruppiere nach FundReportCategoryId, es gibt mehrere Ergebnisse mit der gleichen ID, aber ich möchte, dass alle auf Basis der FundReportCategoryId in einem Summenergebnis zusammengefasst werden.

Jeder kann mir helfen, was ich ändern muss, um das zu erreichen, wonach ich suche?

Danke, Laziale

+1

verwenden. Entfernen Sie einfach FundReportLoanDataID von select & group by? Gibt es etwas Komplexeres hier, das du nicht nennst ... –

+0

Das ist, was ich nach deinem Rat habe https://i.gyazo.com/5415081ac5af1d49c2e5fee971568e12.png – Laziale

+0

Könntest du bitte die Ausgabe setzen, die du erwartest –

Antwort

0

Sie versuchen CurrentLB und die gleiche Spalte in Group by hinzugefügt wird, summieren auch, dass der Grund für Duplikate ist. Entfernen Sie die frld.CurrentLB von Group by

Darüber hinaus müssen Sie FundReportLoanDataID von SELECT und group by becasue die Daten für jede Zeile eindeutig entfernen sucht.

... 
group by frld.SegAmortisation, 
     frld.FundReportLoanDataID 

die frld.LoanId auch aus Group By entfernt, weil Sie es nicht die Auswahl sind die auch

+0

Gleicher Ausgang erneut. – Laziale

+0

@Laziale - check now –

+0

Ausgabe https://i.gyazo.com/40db62de578205531063bf49e9befa42.png – Laziale

0

ein Grund für Duplikate sein könnte, wenn ich richtig verstehe, suchen Sie den Percent jedes FundReportCategoryId. Ist dies der Fall, können Sie die Fensterfunktionen

SELECT TOP 1000 [FundReportLoanDataID] 
     ,[SegAmortisation] 
     ,frlc.FundReportCategoryId, 
     SUM(CurrentLB)/SUM(CurrentLB) OVER(PARTITION BY frlc.FundReportCategoryId) AS '% of Fund' 
    FROM [dbo].[FundReportLoanData] frld 
    INNER JOIN [dbo].[FundReportCategories] frlc 
    ON frld.SegAmortisation = frlc.Description 
    group by frlc.FundReportCategoryId, frld.SegAmortisation, frld.FundReportLoanDataID, frld.LoanId, frld.CurrentLB 
+0

Hallo @john Kannst du bitte ganze Abfrage erneut schreiben, bekomme ich nicht das erwartete Ergebnis – Laziale

+0

Das ist, was ich Spalte bekomme 'dbo.FundReportLoanData.CurrentLB' ist in der Auswahlliste ungültig, weil sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist. – Laziale

+0

@Laziale Aktualisiert Angenommen, das Bild ist, was Sie wollen mit Ausnahme der letzten Spalte als Prozent –

Verwandte Themen