2016-07-29 3 views
0

私はSelectを移調したいがPivotまわりで私の頭を取得し、私はもっと多数のチュートリアルで発見、次のことで当惑していないことができます。SQL Serverのトランスポーズ

「元データが存在してしまう適切に正規化されていました列と行を変換する必要はありません。このタイプの変換を定期的に実行する必要がある場合は、スキーマ設計に問題があります。

具体的方法については、転置値を返すためにSelectを有効に正規化します:

SELECT 
    Date, Activity 
FROM 
    EVENTS 
WHERE 
    CITY = 'Seattle' 

(すなわちではなく、イベントの日付は、私は日付が列として全体で行きたいcolumn1のを下る)

+0

いくつの日付がありますか?これに対する答えは、問題を解決するために動的SQLが必要かどうかを決定します。 –

+0

私は、引用されたステートメントがピボットよりもピボット解除されることをより多く参照すると推測します。例えば都市の列を持つ代わりに、 "シアトル"、 "SomeOtherCity"、 "SomeOtherOtherCity"などの列があります。データを正規化すると、PIVOTを正規化する必要がなくなるため(UNPIVOT)、PIVOTを使用するのが簡単になります。それは、PIVOTステートメントなしでPIVOTを完全に有効にするわけではありません。 – ZLK

答えて

0

おそらく、次のサンプルに似たメソッドを選択することができます。 dynamic SQLをCTE文とCASE演算子で使用しました。 は、私はちょうどあなたの要件は、より良いフィットする各CASE文もちろんdynamic pivot query

declare @mm varchar(2) = datepart(mm,getdate()) 
declare @sql nvarchar(max) 
set @sql = N' 
;with cte as (
    SELECT 
     DATEPART(dd,[date]) dd, 
     convert(date,[date]) [date], 
     Activity 
    FROM 
     [events] 
) 
SELECT 
    case when dd = 1 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 2 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 3 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 17 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 18 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 19 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 20 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 28 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 29 then Activity end as ''' + '01/'[email protected]+'/2016' + ''', 
    case when dd = 30 then Activity end as ''' + '01/'[email protected]+'/2016' + ''' 
FROM cte' 
print @sql 
exec sp_executeSQL @sql 

でconvertionを繰り返していないタイプの日付データに日時を変換するためのCTE式を使用していました。 スタティックピボットの例で構造を理解し、サンプルケースを操作することができます。最後のステップでは、コードを動的ピボットクエリに変換することができます