2016-12-05 4 views
0

私は3つの列をid、カテゴリ、同じidのコードここに私は別のカテゴリと異なるコードを持って、私の質問はどのようにカテゴリに基づいて別の列にコードをプッシュするのですか?私はカテゴリがZ2は、再び私たちは、コードが列Z3に行くべきBを持っているかにBは、その後、次のBは、Z4の列に行く必要がある場合、コードは、Z1列に行かなければならないである場合など上記必要テーブルの行の値を特定の列に基づいて新しい列にプッシュするにはどうすればよいですか?

ex:id category code 
    123 B  25 
    123 B  95 
    123 B  56 
    123 A  81 
    123 A  D7 

これを達成するには?私を助けてください。

+1

してくださいフレーズ 'UPDATE'後のサンプルの入力とサンプル出力の形式に質問。 –

+1

は、コードを列にピボットしたいが、ルールが明確でないように思えます。 – Tanner

+0

ええ、私はピボットを使用する必要がありますが、私はそれを使用して私はZ1列だけカテゴリA値をZ2と他の列に取得していない –

答えて

0

常に行に値を表示し、他のコードには更新しない場合は、計算列を考慮してください。これは、常にそれぞれの値に正しいコードが表示されます:

CREATE TABLE [dbo].[mytest]( [my:ex] [int] NULL, [category] [char](1) NULL, [code] [char](2) NULL, [Z1] AS (case [CATEGORY] when 'A' then [CODE] end), [Z2] AS (case [CATEGORY] when 'B' then [CODE] end), [Z3] AS (case [CATEGORY] when 'C' then [CODE] end), [Z4] AS (case [CATEGORY] when 'D' then [CODE] end) ) ON [PRIMARY]

またはクエリとして:

Select [my:ex] , [category] , [code] , Case [CATEGORY] when 'A' then [CODE] end as [Z1] , Case [CATEGORY] when 'B' then [CODE] end as [Z2] , Case [CATEGORY] when 'C' then [CODE] end as [Z3] , Case [CATEGORY] when 'D' then [CODE] end as [Z4] from mytest

追加の動的機能のために:

declare @sql as nvarchar(max)=N'' declare @columns as nvarchar(500)=N'' select @columns = @columns + N' case [category] when ''' + [category] + ''' THEN [code] END as [Z' + cast(ROW_NUMBER() OVER(ORDER BY [category]) as nvarchar(1)) + N'],' from mytest group by [category] set @columns = left(@columns, len(@columns)-1) set @sql = 'select [my:ex], [category], [code], ' + @columns + ' FROM mytest' exec(@sql)

最後に続きコメント。各カテゴリ/コードの組み合わせのための追加の列を追加します:

declare @sql as nvarchar(max)=N'' declare @columns as nvarchar(max)=N'' declare @rcount as int=1 select @columns = @columns + N' case [category]+[code] when ''' + [category] + [code] + ''' THEN [code] END as [Z' + cast(count([category] + [code]) OVER(ORDER BY [category] + [code] ROWS UNBOUNDED PRECEDING) as nvarchar(5)) + N'],' from mytest group by [category],[code] set @columns = left(@columns, len(@columns)-1) print @columns set @sql = 'select [my:ex], [category], [code], ' + @columns + ' FROM mytest' exec(@sql)

+0

上記のおかげでありがとう、それは有用であり、私のテーブルでは、私が説明したように複数のAとBのカテゴリーがあるピボットを使用して分類するには? –

+0

私は結果をピボットするために動的にしました。 – cloudsafe

+0

偉大なこととそのケースステートメントのように見えるだけでZ1とZ2にコードを分割する、私の疑問は、カテゴリがAならばZ1(複数の場合も)であり、最初のBカテゴリコードはZ2に行くべきで、 Z3そうです...これは可能ですか? –

関連する問題