PDA

View Full Version : سوال: دستور select



niknam_mh
شنبه 27 اردیبهشت 1393, 09:05 صبح
سلام دوستان
آيا مي شه در يه دستور از دو select استفاده کرد به عنوان مثال بخوايم بستانکاري شخصي رو تا 20 ارديبهشت حساب کنيم و بدهکارياش رو تا 25 ارديبهشت ازش کم کنيم ودر اين مدت 5 روز (20 تا 25) کاري به بستانکارياش نداشته باشيم نمي دونم منظورم رو خوب رسوندم يانه
شايد اگه اينجوري بگم بهتره :
داخل يه جدول 3 تا فيلد داريم به نامهاي tarikh,bed,bes
مي خوايم با يه دستور فيلد bes رو بر اساس tarikh<=1393/02/20 و داخل همون دستور فيلد bed رو براساس tarikh>1393/02/20 بدست بياريم و اطلاعات بدست آمده رو در يه رديف نشون بديم.

ممنون از اساتيد عزيز لطفاً راهنمايي کنيد خيلي نياز دارم.

partovi.v
یک شنبه 28 اردیبهشت 1393, 12:06 عصر
سلام دوستان
آيا مي شه در يه دستور از دو select استفاده کرد به عنوان مثال بخوايم بستانکاري شخصي رو تا 20 ارديبهشت حساب کنيم و بدهکارياش رو تا 25 ارديبهشت ازش کم کنيم ودر اين مدت 5 روز (20 تا 25) کاري به بستانکارياش نداشته باشيم نمي دونم منظورم رو خوب رسوندم يانه
شايد اگه اينجوري بگم بهتره :
داخل يه جدول 3 تا فيلد داريم به نامهاي tarikh,bed,bes
مي خوايم با يه دستور فيلد bes رو بر اساس tarikh<=1393/02/20 و داخل همون دستور فيلد bed رو براساس tarikh>1393/02/20 بدست بياريم و اطلاعات بدست آمده رو در يه رديف نشون بديم.

ممنون از اساتيد عزيز لطفاً راهنمايي کنيد خيلي نياز دارم.

سلام
مطمئن نیستم منظورتونو درست فهمیده باشم اما در sqlهر جا نام جدول می نوشتیم می تونید به جاش یه دستور select را بین دو تا پرانتز قرار بدین. که در این صورت از جواب اون دستور به جای کل جدول استفاده می کنه. و تا اونجایی که یادمه تا 32 تا select تو در تو می تونید بنویسید.اگر اشتاباه گفتم اساتید اصلاح کنن.
شما باید از توابع sumمحاسباتی استفاده کنید.وبعد جوابشو به عنوان یه پارامتر با جواب یه sum دیگه که از bes دارید تفریق کنید.به نظر من (با توجه به فهمم از توضیحات شما) دستور select تودرتو جواب درستی نمیده.اگر اطلاعات بیشتر نیاز دارید توضیح بیشتری بدین.

niknam_mh
دوشنبه 29 اردیبهشت 1393, 12:30 عصر
سلام
ميشه دستور سلکت تو در تو روتوضيح بديد يا يه نمونه بگذاريد ممنونم.

محمد آشتیانی
دوشنبه 29 اردیبهشت 1393, 17:14 عصر
سلام
فرض کن این جداول رو داری ، یکی اطلاعات شخص و یکی هم جدول بدهکاری و بستانکاری (همونی که خودت گفتی)

این جدول مشخصات افراد هست (به اسم tbl_Base)

Family
Name
ID












که ID کلید اصلی هست اینجا


و جدول بدهکار بستانکار هم به این ترتیب (به اسم tbl_Details)


BES
BED
Tarikh
ID














تو این جدول ID میشه کلید خارجی


من فکر میکنم کوئری که مورد نیاز شما هست ،چیزی شبیه به اینه (با توجه به جداول بالا)



SELECT B.id
, B.name
, B.family
, (SELECT SUM(bed) FROM tbl_Details WHERE tarikh > '1393/02/20' AND id = B.id) AS [Bedehkar]
, (SELECT SUM(bes) FROM tbl_Details WHERE tarikh <= '1393/02/20' AND id = B.id ) AS [Bestanker]
FROM tbl_Base AS B


چیزی که اهمیت داره اینه که وقتی از کوئری SELECT به جای یه فیلد استفاده میکنی (مثل بالا) ، اون کوئری باید فقط یه فیلد و یک سطر رو بعنوان خروجی برگردونه ، در غیر اینصورت خطا میده

niknam_mh
دوشنبه 29 اردیبهشت 1393, 21:44 عصر
سلام داداش ممنون از راهنماي ات
آيا مي شه نتيجه دو سلکت جدا ازهم رو درون يه ديتا گريد ويو نشون داد؟

محمد آشتیانی
دوشنبه 29 اردیبهشت 1393, 22:16 عصر
سلام
متوجه منظور شما نشدم متاسفانه، اگه منظور سلکت بالاست که اون در واقع یه خروجی داره و میشه
اگر نه که لطفا توضیح بدید دقیقا منظورتونو

hosseinbarnamenevis
دوشنبه 29 اردیبهشت 1393, 22:59 عصر
چرا نشه ، شما نتایج رو در مغیر ها ذخیره کنید و هر نتیجه رو به سلول دیتا گرید خودش مرتبط و پر کنید

niknam_mh
یک شنبه 04 خرداد 1393, 18:19 عصر
سلام
فرض کن این جداول رو داری ، یکی اطلاعات شخص و یکی هم جدول بدهکاری و بستانکاری (همونی که خودت گفتی)

این جدول مشخصات افراد هست (به اسم tbl_Base)

Family
Name
ID












که ID کلید اصلی هست اینجا


و جدول بدهکار بستانکار هم به این ترتیب (به اسم tbl_Details)


BES
BED
Tarikh
ID














تو این جدول ID میشه کلید خارجی


من فکر میکنم کوئری که مورد نیاز شما هست ،چیزی شبیه به اینه (با توجه به جداول بالا)



SELECT B.id
, B.name
, B.family
, (SELECT SUM(bed) FROM tbl_Details WHERE tarikh > '1393/02/20' AND id = B.id) AS [Bedehkar]
, (SELECT SUM(bes) FROM tbl_Details WHERE tarikh <= '1393/02/20' AND id = B.id ) AS [Bestanker]
FROM tbl_Base AS B


چیزی که اهمیت داره اینه که وقتی از کوئری SELECT به جای یه فیلد استفاده میکنی (مثل بالا) ، اون کوئری باید فقط یه فیلد و یک سطر رو بعنوان خروجی برگردونه ، در غیر اینصورت خطا میده


سلام داداش ممنون از جوابت
به عنوان مثال بخوايم شرط بگذاريم داخل سلکت دومي (sum(bed) آنهايي که اين فيلد برابر صفر هست رو نشون نده بايد چکار کنيم

119481

محمد آشتیانی
سه شنبه 06 خرداد 1393, 07:09 صبح
سلام

انتهای کوئری این بخش رو اضافه کن


SELECT B.id
, B.name
, B.family
, (SELECT SUM(bed) FROM tbl_Details WHERE tarikh > '1393/02/20' AND id = B.id) AS [Bedehkar]
, (SELECT SUM(bes) FROM tbl_Details WHERE tarikh <= '1393/02/20' AND id = B.id ) AS [Bestanker]
FROM tbl_Base AS B WHERE (SELECT SUM(bed) FROM tbl_Details WHERE tarikh > '1393/02/20' AND id = B.id) <> 0

اینجوری ردیف هایی که بدهکاریشون صفر میشه ، کلا نمایش داده نمیشن


موفق باشید

niknam_mh
سه شنبه 06 خرداد 1393, 12:21 عصر
سلام

انتهای کوئری این بخش رو اضافه کن


SELECT B.id
, B.name
, B.family
, (SELECT SUM(bed) FROM tbl_Details WHERE tarikh > '1393/02/20' AND id = B.id) AS [Bedehkar]
, (SELECT SUM(bes) FROM tbl_Details WHERE tarikh <= '1393/02/20' AND id = B.id ) AS [Bestanker]
FROM tbl_Base AS B WHERE (SELECT SUM(bed) FROM tbl_Details WHERE tarikh > '1393/02/20' AND id = B.id) <> 0

اینجوری ردیف هایی که بدهکاریشون صفر میشه ، کلا نمایش داده نمیشن


موفق باشید


داداش خدا خيرت بده مشکلم حل شد.