ورود

View Full Version : تفریق دو Query



tahayazdani
پنج شنبه 15 اردیبهشت 1390, 10:51 صبح
سلام
من یک جدول دارم که یه فیلدی به نام کد کالا داره و یه فیلد به نام کد خریدار یا فروشنده.
می خوام جمع تعداد کالاهای خریدار را از جمع تعداد کالاهای فروشنده کم کنم .
باید با دو تا select انجام داد؟
تفریق بینشو باید چه کرد؟
group by هم باید استفاده بشه دیگه حتما؟
مرسی

armangara
پنج شنبه 15 اردیبهشت 1390, 14:22 عصر
می تونی تعداد کالاهای خریدار رو جمع کنی بریزی تو یه متغیر و تعداد کالاهای فروشنده رو هم جمع کنی بریزی تو یه متغیر دیگه در آخر این 2 تا رو از هم کم کنی


select @count1=SUM( ) from tablename where
select @count2=SUM( ) from tablename where
@count=@count1-@count2

اگر هم میخوای نتیجه را به صورت select برگزدونی


select @count tedad,codekala,kodekharidar,codefroshande from tablename

محمد سلیم آبادی
پنج شنبه 15 اردیبهشت 1390, 15:10 عصر
یک فیلد داری که کد خریدار یا کد فروشنده رو نگهداری میکنه. خب از کجا میشه تشخیص داد که این کد مال یک خریدار هست یا یک فروشنده؟
من فرض رو بر این میگیرم که یک ستون دیگه داری که مشخص میکنه این رکورد مال یک فروشنده هست یا یک خریدار و نامشو میذارم kharidar/foroshande و هر موقع که رکورد مال یک فروشنده بود مینویسم foroshande و هرگاه مال یک خریدار بود می نوسم kharidar. با این کار میتونم تشخیص بدم که رکورد مرتبط با چه کسی هست.

سپس از این کوئری استفاده می کنم:

select count(case when kharidar/foroshande = 'froshande' then 1 end) -
count(case when kharidar/foroshande = 'kharidar' then 1 end) as diff
from table;

tahayazdani
پنج شنبه 15 اردیبهشت 1390, 18:06 عصر
سلام
فیلد کد معلوم میکنه که فروشنده است یا خریدار. اگه با 104 شروع بشه میشه خرید اگه با 200 شروع بشه میشه فروش
فرض کنید این سیستم 50 عدد خودکار(فرض کنید کد کالای خودکار 6 است) را خریداری کرده پس یه رکورد با کد 100 داریم و تعداد آن 50 است.
سپس در یک مرحله 10 عدد و در مرحله بعد 20 عدد از این خودکار را می فروشیم. پس دو رکورد اضافه می شود به این گونه که کد آنها با 200 شروع می شود و تعداد آن یکی 10 و دیگری 20 است.
پس در انبار ما الان 20=30-50 خودکار وجود دارد. من این 20 را می خوام.(ممکن است کالاهای دیگری هم با کد کالای دیگر هم باشند، مثلا پاک کن با کد 8) آیا group by استفاده نمی شود؟
(ما 3 تا فیلد داریم در این جدول 1- کد کالا 2- کد خرید یا فروش 3- تعداد)
مرسی

محمد سلیم آبادی
پنج شنبه 15 اردیبهشت 1390, 19:12 عصر
کاشکی حداقل به data type کد فروشنده/خریدار اشاره میکردن. من اونو رشته در نظر گرفتم.
شما یک کار دیگه هم میتونید بکنید وقتی کالا فروخته شده است به جای مثلا 20 بنویسید -20 اون وقت با کد زیر مشکلتون حل میشد.

select sum(tedad)
from table
group by kalaID;
این منفی کردن فروش ها رو شما الان هم میتونید انجام بدین توسط یک کوئری update چیزی شبیه به این:

update table
set tedad = tedad - tedad - tedad
where left(cast(kharid/forosh as varchar(100)), 1, 3) = '200';
حالا میتونید از کد سه خطی فوق استفاده کنید.

آیا group by استفاده نمی شود؟حالا که بیشتر توضیح دادی متوجه نیازت شدم. چرا استفاده میشه چون میخواهی موجودی هر کالا رو بدست بیارین.

اینو امتحان کنید:

select KalaID, sum(case when left(cast(kharid/forosh as varchar(100)), 1, 3) = '200'
then tedad - tedad - tedad
else tedad
end) as [mojodi]
from table
group by kalaID;

tahayazdani
جمعه 16 اردیبهشت 1390, 00:12 صبح
متاسفانه جواب نداد. به تابع left گیر میده که آرگوماناش بیش از حد مجاز است.
در ضمن هر کالا هم خرید داره هم فروش. یعنی هم باید کد های 100 یه کالا پیدا بشه هم کد های 200. بعد جمع آنها از هم کم بشه
مرسی

محمد سلیم آبادی
جمعه 16 اردیبهشت 1390, 00:31 صبح
left رو با substring تعویض کن