2016-12-29 129 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