常に行に値を表示し、他のコードには更新しない場合は、計算列を考慮してください。これは、常にそれぞれの値に正しいコードが表示されます:
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)
してくださいフレーズ 'UPDATE'後のサンプルの入力とサンプル出力の形式に質問。 –
は、コードを列にピボットしたいが、ルールが明確でないように思えます。 – Tanner
ええ、私はピボットを使用する必要がありますが、私はそれを使用して私はZ1列だけカテゴリA値をZ2と他の列に取得していない –