2016-08-19 2 views
-1

Sorry, wenn der Titel nicht sinnvoll, aber ich kann das Wort zu finden scheinen, was genau ich versucheWie Datensätze in mehrere Spalten in SQL Server zusammenfassen

zu tun, ich weiß, wie schwenkt schaffen Gruppe mit von Funktion und Summe, maximale Werte im SQL Server. Aber meine Frage

ist I-Daten haben wie so:

Filename  Branch Name   
1    1  Joe Test  
2    2  Joseph Test 
3    3  Smith Test 

Jeder Dateiname mehrere Kreditnehmer zugeordnet ist, muss ich borrowerid der Tabelle auf Dateinamen verbinden, wenn ich so tun dies geschieht:

Filename  Branch  Name  Borrowerid 
1    1   Joe Test 123 
1    1   Joe Test 345 
1    1   Joe Test 678 
2    2   Joseph Test 412 
2    2   Joseph Test 214 
3    3   Smith Test 333 

Wie kann jeder Kreditnehmer in eine eigene Spalte wie Kreditnehmer1, Kreditnehmer2, Kreditnehmer?

Zum Beispiel

Filename Branch  Name  BorrowerId BorrowerId2 BorrowerId3 
1   1  Joe Test  123   345   678 
2   2  Joseph Test 412   214 
3   3  Smith Test 333  

helfen Bitte helfen, wie diese

zu tun Danke

+1

Verwendung PIVOT um es zu bekommen – techspider

+1

was ist die maximale Anzahl der Kreditnehmer kann einen Dateinamen haben? –

+0

Maximale Anzahl der Kreditnehmer ist 4 –

Antwort

1

PIVOT und/oder DYNAMIC PIVOT ist das, was Sie suchen, aber ich verwende eine gespeicherte Verfahren für den Großteil meiner dynamischen Pivots

Exec [prc-Pivot] 'Select *,NewCol=concat(''Borrowerid'',Row_Number() over (Partition By FileName,Branch,Name Order By Borrowerid)) from YourTable','NewCol','max(Borrowerid)[]','FileName,Branch,Name','count(*)[Records]' 

Rückgabe

FileName Branch Name   Records Borrowerid1 Borrowerid2 Borrowerid3 
1   1  Joe Test  3   123   345   678 
2   2  Joseph Test 2   214   412   NULL 
3   3  Smith Test 1   333   NULL   NULL 

Die gespeicherte Prozedur

CREATE PROCEDURE [dbo].[prc-Pivot] (
    @Source varchar(1000),   -- Any Table or Select Statement 
    @PvotCol varchar(250),   -- Field name or expression ie. Month(Date) 
    @Summaries varchar(250),  -- aggfunction(aggValue)[optionalTitle] 
    @GroupBy varchar(250),   -- Optional additional Group By 
    @OtherCols varchar(500))  -- Optional Group By or aggregates 
AS 

--Exec [prc-Pivot] 'Select Year=Year(TR_Date),* From [Chinrus-Series].[dbo].[DS_Treasury_Rates]','''Q''+DateName(QQ,TR_Date)','avg(TR_Y10)[-Avg]','Year','count(*)[Records],min(TR_Y10)[Min],max(TR_Y10)[Max],Avg(TR_Y10)[Avg]' 
--Exec [prc-Pivot] '#Temp','Attribute','max(Description)[]','ID','count(*)[Records]' 

Set NoCount On 

Declare @Vals varchar(max),@SQL varchar(max); 
Set @Vals = '' 
Set @OtherCols= IsNull(', ' + @OtherCols,'') 
Set @Source = case when @Source Like 'Select%' then @Source else 'Select * From '[email protected] end 
Create Table #TempPvot (Pvot varchar(100)) 
Insert Into #TempPvot 
Exec ('Select Distinct Convert(varchar(100),' + @PvotCol + ') as Pvot FROM (' + @Source + ') A') 
Select @Vals = @Vals + ', isnull(' + Replace(Replace(@Summaries,'(','(CASE WHEN ' + @PvotCol + '=''' + Pvot + ''' THEN '),')[', ' END),NULL) As [' + Pvot) From #TempPvot Order by Pvot 
Drop Table #TempPvot 
Set @SQL = Replace('Select ' + Isnull(@GroupBy,'') + @OtherCols + @Vals + ' From (' + @Source + ') PvtFinal ' + case when Isnull(@GroupBy,'')<>'' then 'Group By ' + @GroupBy + ' Order by ' + @GroupBy else '' end,'Select , ','Select ') 
--Print @SQL 
Exec (@SQL) 
+0

Vielen Dank, das scheint wie es sollte. Wenn ich nur herausfinden könnte, wie ich es ausführe. Sie haben einige Parameter, die als optional erstellt wurden, aber Sie werden immer noch aufgefordert, diese Parameter zu übergeben. Kannst du mir zufällig ein Beispiel zeigen, wie du diesen Prozess nennen würdest? –

+0

NVM du bist ein Genie, Du hast es direkt vor mir geschrieben. Ich danke dir sehr! Das ist erstaunlich –

+0

@HuzaifaMAamir Ich erzähle meiner Frau, dass ich ein Genie bin. Sie weiß es besser –

Verwandte Themen