2016-08-19 65 views
-1

很抱歉,如果標題沒有什麼意義,但我似乎無法找到正是我試圖做如何總結記錄爲多列在SQL Server

我知道如何通過創建使用組樞軸字函數和求和,SQL服務器中的最大值。不過,我的問題是

我有數據,像這樣:

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

每個文件名具有多個借款人相關聯的,我需要加入borrowerid表上的文件名時,我這樣做是這樣發生的:

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 

如何將每個借款人放在自己的專欄,如借款人1,借款人2,借款人?

例如

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

請協助幫助如何做到這一點

謝謝

+1

使用PIVOT得到它 – techspider

+1

什麼是文件名可以有借款人的最大數量? –

+0

最大借款人數爲4 –

回答

1

PIVOT和/或動態Pivot是你在找什麼,但是,我使用存儲程序爲我的動力樞紐大部分

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]' 

返回

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 

存儲過程

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

謝謝,這似乎是應該的。如果我能弄清楚如何執行它。你創建了一些可選的參數,但它仍然要求傳遞這些參數。偶然的情況下,你能告訴我一個關於你如何稱這個過程的例子嗎? –

+0

NVM你的天才,你寫在我面前。非常感謝!這真是太棒了 –

+0

@HuzaifaMAamir我一直告訴我的妻子我是個天才。她知道更好 –