PDA

View Full Version : ساخت یک Views که ستونهای آن ...



reza1357
سه شنبه 11 اردیبهشت 1386, 21:21 عصر
سلام دوستان
من یک جدولی دارم که شامل 8 فیلد است میخوام Views بسازم که رکورد (سطر) اول، ستونهای آن شامل 15 رکورد مورد نظر جدول باشه ، و سطر دوم Views شامل 15 رکورد دوم باشه ؟
چطوری میتونم این کار رو بکنم؟ :متفکر:

با سپاس

AminSobati
چهارشنبه 12 اردیبهشت 1386, 00:29 صبح
صورت مسئله کمی گنگ هستش دوست من، ولی با این حال فکر میکنم داخل View بتونین دو تا Select بنویسین که با هم Union میشن. شاید Union هم نیاز نباشه، بستگی به خواسته شما داره

reza1357
چهارشنبه 12 اردیبهشت 1386, 06:38 صبح
با سپاس از پاسختون امین جان
میخوام بدونم ایا واقعن چنین کاری شدنی هست.
اخه یک گزارش دارم که لازم است رکوردهای موجود جدول را به فیلد تبدیل کنم تا بتونم گزارشم رو طراحی کنم.

با تشکر

reza1357
چهارشنبه 12 اردیبهشت 1386, 09:50 صبح
صورت مسئله کمی گنگ هستش دوست من، ولی با این حال فکر میکنم داخل View بتونین دو تا Select بنویسین که با هم Union میشن. شاید Union هم نیاز نباشه، بستگی به خواسته شما داره
امین جان من که نتونستم با دوتا select اینکار رو بکنم؟
اگه ممکنه یک نمونه الگو بزار.

با تشکر

Kamyar.Kimiyabeigi
چهارشنبه 12 اردیبهشت 1386, 11:42 صبح
مثال


SELECT LastName, FirstName, BirthDate FROM dbo.Employees
UNION
SELECT CustomerID, CustomerID, '' FROM dbo.Orders

نکته : در Union باید تعداد فیلدهای هر Select با هم برابر باشه. مثلا" در مثال بالا من تو Select اول واقعا" سه تا فیلد دارم ولی برای Select دوم دوتا فیلد دارم. برای اینکه تعداد فیلدهاش با Select اول برابر بشه بجای BirthDate جای خالی گذاشتم که تعداد فیلدهای Select دوم هم سه تا بشه دو تا فیلد واقعی و سومی یک فیلد مجازی برای برابر کردن تعداد فیلدها.

AminSobati
چهارشنبه 12 اردیبهشت 1386, 13:13 عصر
من یک مقدار وسواس دارم! تا سوال رو خوب درک نکنم از پاسخم نامطمئنم. اگر دستور کامیار خان جواب داد که چه بهتر، اگر نه بیشتر توضیح بدین لطفا!

reza1357
چهارشنبه 12 اردیبهشت 1386, 21:32 عصر
امین جان متاسفانه دستور کامیار خان بدردم نخورد.
امین جان در برنامه ام یک گزارشی دارم که فرم آن شامل 8 ستون و 15 سطر است، سطرهای این گزارش در بعضی از جاها شاید دو سطر پر نشوند به همین خاطر مجبور شدم جدولم رو به این شکل بسازم. اگه بخوام این جدول رو به شکل دیگه بسازم حدود 8*15 فیلد میشه و این کار درستی و منطقی نیست.
حالا میخوام موقع گزارش هر 15 سطر اول جدول بیان توی کوری تا ازشون استفاده کنم.
فرم گزارشم هم یک فرم استاندارد تایید شده شرکت هست و جای امضای مدیران هم موازی سطرها است و نمیتونم جای سطرها و جای امضاها رو تغییر بدم تا بتونم از جدول اصلی به همین شکل استفاده کنم مجبورم تیبلی یا کوری بسازم که از جدول 8 ستونه اون 15 رکورد رو استخراج کنه !

اگه باز توضیحاتم کامل نیست بگین تا بیشتر توضیح بدم.

با تشکر

AminSobati
چهارشنبه 12 اردیبهشت 1386, 22:01 عصر
رضا جان یکی اینکه دستور CREATE TABLE از جدولی که اطلاعات گزارش رو تامین میکنه بفرست.
و دیگه اینکه این گزارش 8 ستونه شما چه ویژگی خاصی داره که نمیشه دستورش رو نوشت؟ یعنی اصل مشکل کجاست؟ چون تا اینجا با توضیحات شما، در حقیقت به نظر میرسه حداکثر اگر دو تا Query با هم Union بشن مشکل حله

reza1357
پنج شنبه 13 اردیبهشت 1386, 07:50 صبح
امین جان مشکلم اینجاست که چطوری بتونم جدول دومیم بسازم که فیلدهاش 15 رکورد اول جدول باشه.
امین جان فرم گزارش و جدول برای شما ایمیل کردم.

با سپاس

AminSobati
پنج شنبه 13 اردیبهشت 1386, 09:27 صبح
select top 15 * into newtable from maintable order by mycolumn

reza1357
پنج شنبه 13 اردیبهشت 1386, 09:52 صبح
select top 15 * into newtable from maintable order by mycolumn
امین جان ساختار جدول جدید باز مثل ساختار جدول اصلی هست اینجوری بدرد کارم نمیخوره.
ظاهرا منظورم رو خوب بیان نکردم:گریه: - من 15 رکورد جدول اصلی که تشکیل شده از 8 ستون(8*15=120) به جدولی جدید تحت 1 رکورد با 120 فیلد ایجاد بشه.
که بتونم 120 فیلد رو در گزارش بزارم.

امین جان شرمنده به زحمتت انداختم.

AminSobati
پنج شنبه 13 اردیبهشت 1386, 10:54 صبح
رضا جان من این Query رو برای 5 رکورد روی دیتابیس Northwind نوشتم حالا شما میتونین این رو تکرار کنین تا 15 رکورد (البته با تغییر نام فیلدها برای جدول خودتون). ولی در 2005 فکر میکنم راه حلهای بهتری باشه!


USE Northwind
Go

select top 1 * from
(select * from
(select * from
(select top 1 * from
(select customerid as cid1,country as cty1 from customers) t1
join (select customerid as cid2,country as cty2 from customers ) t2
on t1.cid1<t2.cid2) tmp1
join (select customerid as cid3,country as cty3 from customers ) t3
on tmp1.cid2<t3.cid3) tmp2
join (select customerid as cid4,country as cty4 from customers ) t4
on tmp2.cid3<t4.cid4) tmp3
join (select customerid as cid5,country as cty5 from customers ) t5
on tmp3.cid4<t5.cid5

reza1357
پنج شنبه 13 اردیبهشت 1386, 11:10 صبح
امین جان عالی بود مشکلم حل شد.http://forum.ya-mahdi.info/Smileys/default/281.gifhttp://forum.ya-mahdi.info/Smileys/default/281.gifhttp://forum.ya-mahdi.info/Smileys/default/281.gif
دستتون درد نکنه :خجالت: