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

は、あなたがソースのソース1、ソース2のように配列決定することにしたい場合は、それだけでマイナーな微調整

が必要になり、ソース

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 

に簡単な動的なピボットであります

FYIは、このようになります。

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

ありがとうございます:) – GurV

+0

@ GurwinderSingh私は何を言うことができますか、私は退屈で、私は本当に地下室をきれいにしたくありません。 –

+1

私はまだそれを行う方法を学んでいます。私はあなたの前でそれをやるつもりです。 +1 – GurV

関連する問題