web-dev-qa-db-ja.com

SQL Serverで複数の列をピボットする方法

ピボットを使用して必要な形式でデータを取得することについての投稿をたくさん読んだことがありますが、読むほど混乱します。

私はこのデータを持っています:

enter image description here

これに似た形式にしようとしていること: enter image description here

ほとんどの場合、試行したすべての結果がSQLエラーになり、成功した唯一の試みは、探している形式でデータを返しませんでした。

任意の助けいただければ幸いです。

2
Ted O'Brien

何かのようなもの:

select hour_of_day, 
       avg( case when day_of_week = 2 then item_count else null end ) Mondays,
       avg( case when day_of_week = 3 then item_count else null end ) Tuesdays,
       avg( case when day_of_week = 4 then item_count else null end ) Wednesdays,
       avg( case when day_of_week = 5 then item_count else null end ) Thursdays,
       avg( case when day_of_week = 6 then item_count else null end ) Fridays,
       avg( case when day_of_week = 7 then item_count else null end ) Saturdays,
       avg( case when day_of_week = 1 then item_count else null end ) Sundays
where ...
group by hour_of_day

dba.stackexchangeへようこそ。 (失敗した)クエリと取得したエラーを貼り付けると役立つ場合があります。

他のヒントやチュートリアルがあなたの課題を解決できなかったのは残念です。具体的にはピボットを求めているので、(私には)非常に簡単に見える別のドキュメントをお勧めします。
https://docs.Microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15 =

基本的なピボットフォームは次のようになります。

SELECT <non-pivoted column>,  
  [first pivoted column] AS <column name>,  
  [second pivoted column] AS <column name>,  
  ...  
  [last pivoted column] AS <column name>  
FROM  
  (<SELECT query that produces the data>)   
  AS <alias for the source query>  
PIVOT  
(  
   <aggregation function>(<column being aggregated>)  
FOR   
   [<column that contains the values that will become column headers>]   
   IN ( [first pivoted column], [second pivoted column],  
   ... [last pivoted column])  
   ) AS <alias for the pivot table>  
<optional ORDER BY clause>;  

あなたの場合、それらの行に沿って何かが判明する可能性があります(私はこれをテストしておらず、すべてを完了していません):

SELECT TimesOfDay,  
  [1] AS Monday,  
  [2] AS Tuesday,  
  ...  
  [last pivoted column] AS <column name>  
FROM  
  (<SELECT query that produces the data>)   
  AS <alias for the source query>  
PIVOT  
(  
   sum(item_count)  
FOR   
   [day_of_week]   
   IN ( [1], [2],  
   ... [7])  
   ) AS <alias for the pivot table>  
<optional ORDER BY clause>;  

アンドレアスに役立つことを願っています

3
Andreas J