PDA

View Full Version : برگردان یک فیلد اضافی در select بر اساس یک شرط



kastakoorta
دوشنبه 27 مهر 1388, 01:53 صبح
با سلام و عرض ادب .
من دو جدول دارم که شامل فیلدهای زیر است .

جدول اول :
شناسه دسترسی
نام
نام خانوادگی
شماره ملی

جدول دوم :
شناسه دسترسی
تصویر

حالا select ی رو براساس این شرط که اگر در جدول دوم شناسه دسترسی فردی که در جدول اول مشخص شده بود وجود داشت یک فیلد با نام ishavepicture از نوع boolean داشته باشم .
که اگر اطلاعاتی با شناسه فرد در جدول دوم وجود نداشت مقدار صفر و اگر وجود داشت مقدار یک رو برگردونه .
قبلا از همکاری دوستان سپاسگذارم .

MohsenTi
دوشنبه 27 مهر 1388, 09:00 صبح
این یه نمونه ولی اونایی که تو تیبل دوم مشخصات ندارن رو نشون نمی ده

SELECT Table2.Name, [Fam]="" AS HaveFam
FROM Table2 INNER JOIN Table3 ON Table2.Code = Table3.Code;

می تونی تو یک AdoQueryبنویسیش
راستی دیتابیست چیه ؟

دلفــي
دوشنبه 27 مهر 1388, 11:13 صبح
اگه منظورتون اینه فایل پیوست رو دانلود کنید :


http://img40.imagefra.me/img/img40/2/10/19/yalanemail/f_qykm_bdd4dd2.jpg

kastakoorta
چهارشنبه 29 مهر 1388, 00:57 صبح
دوست عزیز MohsenTi آیا مطئنید این کد جواب میده .
من به نتیجه ای نرسیدم با این کد .

"دلفــي" عزیز ممنون از برنامه ای که گذاشتید ، ولی من میخوام با دستورات SQL اینکار رو انجام بدم .

ممنون میشم راهنمایی کنید .

young_man1365
چهارشنبه 29 مهر 1388, 09:37 صبح
نمیدونم شما از چه پایگاهی استفاده میکنی اما برای کار با mysql در این مورد باید از ifnull استفاده کرد. بصورت زیر:


select one.sh,one.name,one.lname,one.melli, ifnull(two.sh,NULL) as haspicture from one,two where one.sh=two.sh;

اگه تو پایگاه داده شما از نوع mysql نیست ممکنه نیاز داشته باشی دنبال تابع معادل ifnull بگردید.
موفق باشید

merced
چهارشنبه 29 مهر 1388, 20:25 عصر
خوب چرا هر دو تا جدول رو ادعام نمي كني (اگه هنوز در حال طراحي هستي)
من حدس مي زنم ارتباطت يك به يك هست. (به ازاي هر ركورد جدول يك فقط يك ركورد از جدول 2)
اگه اينجوري هست با جدا كردن دو تا جدول افزونگي رو بيشتر كردي . !!!
تصوير رو هم بيار تو جدول اول و دستورات Select رو اصلاح كن (موقعي كه به تصوير احتياج نيست اون فيلد رو تو Select نيار)

MohsenTi
پنج شنبه 30 مهر 1388, 00:46 صبح
دوست عزیز کدی که نوشتم توسط Access ساخته شده .
البته بجای نوشتن True , False از صفر و یک استفاده می کند.

AmirSky
پنج شنبه 30 مهر 1388, 16:50 عصر
ببین این بدردت می خوره. منظور از ID همون فیلد شناسه هستش. با این روش یک فیلد اضافه خواهی داشت با نام ishavepicture که اگر در جدول دوم شناسه وجود داشته باشه مقدار 1 و اگر نه مقدار 0 رو بر می گردونه. موفق باشی


SELECT * ,
CASE
WHEN ID IN (SELECT ID FROM TABLE_2 ) THEN 1
ELSE 0
END ishavepicture
FROM TABLE_1

kastakoorta
سه شنبه 05 آبان 1388, 01:07 صبح
بسیار عالی بود دوستان .
دستوراتی که آقای "AmirSky" بسیار مفید و مناسب بود .
از کلیه دوستان متشکرم .