CREATE TABLE [dbo].[nTable](
[p_key] [int] NOT NULL,
[mf_1] [char](5) NULL,
[mf_2] [char](5) NULL,
[mf_3] [char](5) NULL,
[mf_4] [char](5) NULL,
[mf_5] [char](5) NULL,
[cf_1] [int] NULL,
[cf_2] [int] NULL,
[cf_3] [int] NULL,
[cf_4] [int] NULL,
[cf_5] [int] NULL,
CONSTRAINT [PK_nTable] PRIMARY KEY CLUSTERED
(
[p_key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Sample Data...
p_keymf_1mf_2mf_3mf_4mf_5cf_1cf_2cf_3cf_4cf_5
1AAA BBB CCC DDD EEE 55555
2BBB DDD BBB BBB BBB 55555
3EEE DDD CCC BBB AAA 55555
4FFF HHH III AAA NULL4444NULL
5ZZZ NULLNULLNULLNULL1NULLNULLNULLNULL
6GGG BBB EEE AAA NULL4444NULL
7MMM EEE AAA NULLNULL333NULLNULL
8NULLNULLNULLNULLNULL00000
9RRR TTT DDD BBB CCC 55555
10BBB CCC AAA NULLNULL333NULLNULL
11CCC AAA NULLBBB NULL33NULL3NULL
12WWW UUU AAA CCC EEE 55555
13SSS AAA DDD EEE NULL4444NULL
14EEE FFF BBB AAA NULL4444NULL
15TTT NULLNULLNULLNULL1NULLNULLNULLNULL
16YYY AAA NULLNULLNULL22NULLNULLNULL
17GGG XXX BBB NULLNULL333NULLNULL
18BBB AAA CCC EEE DDD 55555
19PPP BBB TTT JJJ NULL4444NULL
20KKK LLL NULLNULLNULL22NULLNULLNULL
drop table pvtTable
select p_key, mf_value, mf_field, REPLACE(mf_field,'mf_','cf_') as cf_field into pvtTable from nTable
unpivot
(mf_value for mf_field in
(mf_1, mf_2, mf_3, mf_4, mf_5)) as pvtTable where mf_value in ('AAA','BBB')
declare getCSField cursor for select p_key, cf_field from pvtTable
open getCSField
declare @cmd varchar(max),
@P_Keyint,
@CSField as varchar(100);
fetch next from getCSField into @P_Key, @CSField
while @@FETCH_STATUS = 0
begin
begin try
execute ('select ' + @P_Key + ' as p_key, ' + @CSField + ' from nTable where p_key = ' + @P_Key)
end try
begin catch
select @P_Key, @CSField
end catch
fetch next from getCSField into @P_Key, @CSField;
end
CLOSE getCSField
DEALLOCATE getCSField