2016-12-29 3 views
1

Ich versuche, ein grobes gehe mit meinen Daten zu verschwenken :(Es ist dynamisch Daten und wie folgt strukturiert:SQL Server Pivot auf diesen Daten

| Date | Source | Amount | 
-------------------------------------------- 
| 12/1/2016 | Source1 |  $0  | 
| 12/1/2016 | Source2 |  $2  | 
| 12/1/2016 | Source3 |  $5  | 
| 12/1/2016 | Source4 |  $4  | 

Es kann unbegrenzt Quellen sein, und ich will es verschwenken von Quelle/Datum:.

| Date | Source1 | Source 2 | Source 3 | Source 4 | 
-------------------------------------------------------------------------------------- 
| 12/1/2016 | $0   | $2   | $5   |  $4  | 

so ähnlich jedenfalls

ich habe versucht, eine Menge Möglichkeiten, Codierung, also werde ich einfach stecken in dem, was ich dachte, es könnte:

SELECT  myDate , Source, Amount 
FROM   mydb 

PIVOT 
(max(source) FOR source IN (select distinct source from mydb) as myPivotTable 

WHERE  (myDate > @StartDate) 

natürlich funktioniert das nicht. Dies würde Teil einer gespeicherten Prozedur sein, nur nicht ganz da. Ich hatte gehofft, dass ich mich auf diese Daten konzentrieren kann, damit ich einige Linientrends in SSRS machen kann.

Ich folgte auch ein weiteres Beispiel und versucht, dies:

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(source) 
        from mydb where myDate > @StartDate 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

Und dann versucht, dass an die Stelle der „select distinct“ zu verwenden. Die Quellen sind jedoch Text und das scheint mir nicht viel zu tun.

+0

Ich warte auf den dynamischen Schwenker angezeigt werden. – GurV

+1

@GurwinderSingh Du bringst mich zum Kichern –

Antwort

1

Hier ist ein einfaches Dynamische Pivot auf Quelle

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([Source]) From Yourtable Order by 1 For XML Path('')),1,1,'') 
Select @SQL = ' 
Select [Date],' + @SQL + ' 
From YourTable 
Pivot (sum(Amount) For [Source] in (' + @SQL + ')) p' 
Exec(@SQL); 

Returns

Date  Source1 Source2 Source3 Source4 
2016-12-01 0  2  5  4 

Nun, wenn Sie Quelle wollen wie Source 1, 2 Quelle sequenziert werden, um es nur eine kleine zwicken erfordern würde

FYI das generierte SQL würde so aussehen

Select [Date],[Source1],[Source2],[Source3],[Source4] 
From YourTable 
Pivot (sum(Amount) For [Source] in ([Source1],[Source2],[Source3],[Source4])) p 
+0

Da bist du :) – GurV

+0

@GurwinderSingh Was soll ich sagen, mir ist langweilig und ich WIRKLICH will den Keller nicht reinigen. –

+1

Ich lerne immer noch, wie es geht. Vielleicht werde ich es eines Tages tun: P. +1 – GurV