PDA

View Full Version : مشکل در یک کوری پیچیده



NasimBamdad
شنبه 07 مرداد 1391, 00:46 صبح
سلام خدمت دوستان عزیز . من یک کوری نوشتم که به صورت زیر هست . فکر کنم مشکلات زیادی داره و استاندارد نباشه . نمی دانم تشخیص اون به عهده شما اساتید .

کوری من اینه

INSERT INTO invoice_daroo(patientid,darooid,cost_azad,cost_bim e,cost_bimar)
SELECT DU.patientid,DU.darooid,(DU.numberz * DT.daroo_cost_azad),(DU.numberz * DT.daroo_cost_bime), (DU.numberz * DT.daroo_cost_azad) - (DU.numberz * DT.daroo_cost_bime)
FROM patients AS P INNER JOIN
daroo_usage DU ON P.id = DU.patientid LEFT OUTER JOIN
invoice_daroo IND ON P.id = IND.patientid LEFT OUTER JOIN
daroo_type DT ON DU.id = DT.id
WHERE P.bime_status = '2'


من 4 تا جدول از جداولم رو می خوام براشون کوری بنویسم . در اکثر جداولم یک فیلد منحصر به فرد دارم به اسم patientid که شماره پرونده بیمار هست که منحصر به فرد هست . جداولی که به نحوی مقادیری نظیر قیمت ها رو در اون ها ذخیره می کنم از این فیلد برخوردار نیستند .

یه جدول بیماران دارم که تمام مشخصات فردی بیمار در اون هست . یه جورایی جدول مرجع من هست . ( اسم جدول patients می باشد و فیلد id برابر با شماره پرونده هست . )
//////////////////////
جدول invoice_daroo که جدولی هست که مقادیر مالی در واقع صورت حساب بیمار در اون قید می شود و از چند ستون تشکیل میشه
id به عنوان شمارنده
patientid به عنوان شماره پرونده ( همون فیلد منحصر به فرد )
darooid که id هر دارو هست که از جدول دیگه ای لود میشه
cost_azad بهای آزاد دارود
cost_bime بهای بیمه دارو
cost_mokamel بهای بیمه مکمل دارو
cost_bimar بهای بیمار
//////////////////////
جدول daroo_type که انواع دارو ها + قیمت دارو ها در قالب آزاد - بیمه - مکمل در اون درج میشه
id به عنوان شمارنده
darooid که کد دارو هست
numberz که تعداد استفاده شده اون دارو هست . ( مثلا 5 تا از این دارو برای بیمار استفاده شده
patientid که شماره پرونده بیمار هست . هر بیمار رو با بیمار دیگه متمایز می کنه و منحصر به فرد هست
//////////////////////
جدول daroo_usage که دارو های استفاده شده در این جدول هستند .
id به عنوان شمارنده
daroo_name به عنوان اسم دارو
daroo_cost_azad بهای آزاد دارو
daroo_cost_bime بهای بیمه دارو
daroo_cost_mokamel بهای مکمل دارو
//////////////////////

من می خواهم که تعداد دارو استفاده شده در جدول daroo_usage * قیمت آزاد یا بیمه یا و.... بشه و در جدول invoice_daroo درج بشه .

با اولین کوری که بالا نوشتم این کار صورت می گیره ، مقادیر در جدول invoice_daroo درج میشه ،،، اما فقط patientid درج میشه و قیمت ها ، در واقع عملیات ضرب انجام نمیشه .

این وسط یک شرط دارم ، شرط من از جدول patients مشتق میشه . و اون هم فیلد bime_status هست که در جدول patients هست . باید مقدار bime_status برابر با '2' باشه . یعنی از بین دارو های استفاده شده در جدول daroo_usage برای بیماران ،،،، تنها بیمارانی که در جدول patients مقدار bime_status شان برابر 2 هست رو انتخاب کنه برای ضرب و درح در جدول invoice_daroo

یکم بد توضیح دادم ، شرمنده اگه جایی رو متوجه نشدید بگید تا بهتر توضیح بدم . یک عکس هم قرار دادم که امیدوارم بهتر کمک کنه .
لیــــنک عکــــــس (http://1.0.0.img98.net/out.php/i415961_q.gif)

پیشاپیش از زحمات شما متشکرم .

morteza271
شنبه 07 مرداد 1391, 13:08 عصر
سلام.
راستش دقیقا متوجه منظورتون نشدم.
ولی اگه میخواین یه سری ازسطرهای یک جدول (یا ترکیبی از چند جدول) رو به یک جدول دیگه منتقل کنید میتونید از CURSORها استفاده کنید که به نظرم کارتون رو راحت تر میکنه.
اگه هم با CURSOR کار نکردین توی Search خود Sql عبارت CURSOR رو جستجو کنید نمونه براتون میاره.
بازم اگه مشکلی بود در خدمتم.
موفق باشید.

NasimBamdad
شنبه 07 مرداد 1391, 18:10 عصر
چیز زیادی پیدا نکردم . عزیز جان میشه مثال برنی ؟

NasimBamdad
دوشنبه 16 مرداد 1391, 14:38 عصر
بالاخره خودم درستش کردم و حل شد . کوری رو اینجا میزارم که دوستان اگر خواستند استفاده کنند


INSERT INTO invoice_daroo(patientid,darooid,cost_azad,cost_bim e,cost_bimar) SELECT DU.patientid, DU.darooid, DU.numberz * DT.daroo_cost_azad, DU.numberz * DT.daroo_cost_bime, (DU.numberz * DT.daroo_cost_azad) - DU.numberz * DT.daroo_cost_bime FROM daroo_usage DU INNER JOIN daroo_type DT ON DU.darooid = DT.id INNER JOIN patients P ON DU.patientid = P.id LEFT OUTER JOIN invoice_daroo IND ON DU.darooid = IND.darooid AND P.id = IND.patientid WHERE (P.bime_status = '2') AND (P.takmili = '5')