امتحان کنید:
--حل مساله کراس تبینگ داینامیک
--تعریف یک جدول از نوع موقت
create table #sample
(
id int not null primary key,
cntName varchar(50) not null
);
--درج داده های آزمایشی
insert into #sample (id, cntName)
values (1002, 'نام'), (1003, 'فامیل'), (1004, 'سن');
--تعریف یک جدول از نوع موقت
create table #sampleTable
(
id int not null primary key,
groupid int not null,
cntID int not null,
cntValue varchar(500) not null
);
--درج داده های آزمایشی
insert #sampleTable(id, groupid, cntID, cntValue)
values (1, 1, 1002, 'حسن'),
(2, 1, 1003, 'رضایی'), (3, 1, 1004, '30');
--تعریف بدنه ی کوئری بصورت داینامیک
declare @sql varchar(4000) = '';
select @sql += ',max(case when cntID = ' + cast(id as varchar(50)) + ' then cntValue end) as ['+ cntName +']'+char(13)
from #sample
set @sql =
'select groupid, ' + stuff(@sql,1,1,'') +
'from #sampleTable
group by groupid;'
--اجرای رشته کوئری تولید شده در مرحله قبل
execute (@sql)
--حذف جداول موقت
drop table #sample, #sampleTable