2016-12-29 169 views
1
我有

一個粗略的去努力轉動我的數據:(這是動態的數據結構是這樣的:SQL Server的數據透視

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

可以有無限的資源,我想它轉動按來源/日期:

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

類似的東西,反正我已經試過編碼了很多辦法,所以我就放了我認爲它可能是:

SELECT  myDate , Source, Amount 
FROM   mydb 

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

WHERE  (myDate > @StartDate) 

當然,這是行不通的。這將成爲存儲過程的一部分,只是不完全。希望能夠以這些數據爲基礎,以便我可以在SSRS中實現一些趨勢。

我也跟着另一個例子,試圖這樣的:

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

然後試圖用在了「選擇不重複」的地方。但是,消息來源是文字,對我來說似乎沒有多大用處。

+0

我正在等待動態樞軸顯示。 – GurV

+1

@GurwinderSingh你讓我咯咯 –

回答

1

下面是一個簡單的動態透視的來源

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); 

返回

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

現在,如果你想源進行測序像源1,源2,將需要的只是一個小調整

僅供參考生成的SQL將如下所示

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

你在這裏:) – GurV

+0

@GurwinderSingh我能說什麼,我很無聊,我真的不想清理地下室。 –

+1

我仍在學習如何去做。可能有一天我會在你面前這樣做:P。 +1 – GurV