2016-04-15 28 views
0

私は次のように数千行を出力し、クエリ構築しました:SQL Serverのテーブル移調/ピボット

| Person | Date  | Hours1 | Hours2 | 
    Steve 2016 04  18   42.0 
    John  2016 04  21   32.09 
    Pete  2016 04  9   78.5 
    Steve 2016 03  10   10 
    Dave  2016 03  5   50 
    etc... etc...  etc...  etc... 

をしかし、私は必要があります。

|Person | 2016 04 Hours1 | 2016 04 Hours2 | 2016 03 Hours1 | 2016 03 Hours2 | etc... 
Dave   NULL    NULL    5    50   etc...    
John   21    32.09    NULL   NULL   etc... 
Pete   9    78.5    NULL   NULL   etc... 
Steve   18    42.0    10    10   etc... 
etc...   etc...   etc...   etc...   etc...  etc... 

は、私は他の質問を見ていたですトランスポーズ/ピボットを使用していますが、これは日付と人の動的な数があるため、これは単純なユースケースであるとは確信していませんが、どこから始めるべきかはわかりません!

+0

動的SQLクエリを作成し、どこだろう、のは、私は、動的SQLの代わりに、フロントエンドに頼るを構築したいとしましょう – Wanderer

答えて

3

動的クエリを作成して実行します。

クエリ

declare @sql as varchar(max); 

select @sql = 'select Person,' + stuff((
    select distinct 
    ',max(case [Date] when ''' + [Date] + ''' then Hours1 end) as [' + [Date] + ' Hours1]' + 
    ',max(case [Date] when ''' + [Date] + ''' then Hours2 end) as [' + [Date] + ' Hours2]' 
from Person 
for xml path('')), 1, 1, ''); 

select @sql += ' from Person group by Person;'; 

exec(@sql); 

結果

+--------+----------------+----------------+----------------+----------------+ 
| Person | 2016 03 Hours1 | 2016 03 Hours2 | 2016 04 Hours1 | 2016 04 Hours2 | 
+--------+----------------+----------------+----------------+----------------+ 
| Dave | 5    | 50    | NULL   | NULL   | 
| John | NULL   | NULL   | 21    | 32.09   | 
| Pete | NULL   | NULL   | 9    | 78.5   | 
| Steve | 10    | 10    | 18    | 42    | 
+--------+----------------+----------------+----------------+----------------+ 
+0

素晴らしいソリューション。他のSQLとdyn sqlを作成します。シンプル&ストレート。 –

+0

これは完全に私のために働くが、私はどのように考えているかを認めなければならない!私は動的SQLの良いコースを見つける必要があるように見えます。 – TimJ

0

SQL Serverには一般的なピボット機能はありません。動的SQL文を作成するか、クライアント・アプリケーションでデータを処理する必要があります。

+0

を実行します開始? – TimJ