PDA

View Full Version : کمک در نوشتن یک کوئری CrossTab



moferferi
پنج شنبه 07 آذر 1392, 20:20 عصر
سلام
من یه جدول فرم دارم که درون فیلدهای متغیری ذخیره میشن
مانند 3 فیلد زیر.که این فیلدها داینامیکه و ممکنه بیشتر بشه

http://barnamenevis.org/attachment.php?attachmentid=113220&d=1385400922
و جدولی هم دارم که به ازای هر فیلد یک مقدار ذخیره میشه
وقتی کاربر اطلاعات یک فرم که شامل اطلاعات جدول بالا هست را وارد میکنه درون جدول زیر ذخیره میشه و به اون یک formid اختصاص میده
http://barnamenevis.org/attachment.php?attachmentid=113221&d=1385400954
حالا میخوام از این دو جدول چینن خروجی تهیه کنم
http://barnamenevis.org/attachment.php?attachmentid=113222&d=1385401136

تا اونجایی که فهمیدم باید این گزارش را از طریق CrossTab ایجاد کنم.
سمپل های زیادی دیدم.ولی نتونستم ازش استفاده کنم.شرمنده ولی سواد sql زیادی ندارم
در ضمن اکثرا مثال ها واسه جداول با فیلدهای ثابت بود.اما فیلدهای جدول من داینامیکه

با تشکر

محمد سلیم آبادی
جمعه 08 آذر 1392, 11:03 صبح
امتحان کنید:


--حل مساله کراس تبینگ داینامیک

--تعریف یک جدول از نوع موقت
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

moferferi
جمعه 08 آذر 1392, 22:23 عصر
سلام
یه دنیا ممنون.نمیدونم چطور ازتون تشکر کنم.کل پروژم معطل همین کوئری بود.
خیلی لطف کردین.

fakhravari
جمعه 12 خرداد 1396, 13:26 عصر
نمیشه روی DECLARE @cc TABLE از نوع DECLARE نوشت؟