PDA

View Full Version : سوال: نوشتن کوئری جمع با دو شرط و نشان دادن در گرید ویو



MahmoodM30
یک شنبه 27 مهر 1393, 10:58 صبح
سلام دوستان من دوتا جدول دارم که یکی کالا و دومی انبار هست که با View به هم ربط دادم و جوین کردم که فیلد ها شده

NameKala-Vorodi-VKH با نام جدول ViewKala

که فیلد نام کالا برای جدول کالا و دو تا فیلد دیگه برای انبار هست

فیلد ورودی تعداد ورودی و خروجی تو انبار رو میگیره و با مقدار 0 و 1 مشخص میکنه که این برای ورود به انبار بوده یا خروج که اگه مقدار فیلد VKH=0 کالا وارد انبار شده و 1 باشه یعنی خروجی

حالا من میخوام مقدار کل ورودی و خروجی از انبار رو نشون بدم یعنی اونایی که مقدار فیلد VKH اونها 0 و 1 هست و تو یه دیتاگرید نشون بدم

فقط میخوام برای تمامی کالا ها باشه یعنی ممکنه 100 نوع کالا باشه و میخوام که یه کوئری بنویسم برای همه کالا ها رو تو خروجی نشون بده ممنون میشم دوستان راهنمایی کنن

البته کلی گشتم ولی نتونستم حلش کنم مثلا یه کد هایی به این شکل بود که میشد داخل تابع SUM شرط نوشت

SUM(CASE WHEN D.MetalType='Gold' THEN D.Weight ELSE 0 END) AS TotGold

تو بخش SQL هم مطرح کردم ولی جوابی داده نشد ممنون میشم دوستان بگن اصلا میشه این کار رو کرد یا باید فیلد ها رو تغییر داد؟

gerdioz
یک شنبه 27 مهر 1393, 11:05 صبح
دو تا جدول و همچین view رو بزار با این توضیحات سخته درکش

MahmoodM30
یک شنبه 27 مهر 1393, 11:32 صبح
دیتابیس رو پیوست کردم با خود سی شارپ ایجادش کردم

جدول کالا
124706

جدول انبار
124707

اینم کد View که ایجاد کردم و جوین شدن این دو جدول

SELECT dbo.TBLKala.name_kala, dbo.TBLKala.noe_kala, dbo.TBLAnbar.vorodi, dbo.TBLAnbar.geymate_kol, dbo.TBLAnbar.VKH
FROM dbo.TBLAnbar INNER JOIN
dbo.TBLKala ON dbo.TBLAnbar.code_kala = dbo.TBLKala.code_kala


من قبلا برای ورود و خروج دو تا فیلد در نظر میگرفتم یعنی اگه کالا وارد میشد فیلد مربوط به خودش پر میشد و اونیکی مقدارش 0 میشد و برعکس برای خروج کالا

ولی ایندفه تصمیم گرفتم تعداد فیلد ها رو کاهش بدم ولی نمیتونم عملیاتی انجام بدم

gerdioz
یک شنبه 27 مهر 1393, 12:05 عصر
خب دوست عزیز شما می خواهید مقدار جمع ورود و خروج هر کالا رو داشته باشید درسته ؟

juza66
یک شنبه 27 مهر 1393, 12:15 عصر
سلام
واو چی بگم چی بگم؟!!!!
مسئله رو بدجور پیچوندی دوست عزیز .. من که معذورم ولی یه راهنمایی بکنم شاید بدردت بخوره


برنامه انبار داری که من ساختم اینطوره:

1- یک مشتری با یک شناسه تعریف میکنم

2- محصولات تویی انبارم رو با یک شناسه و تعداد فروخه شده و تعداد کل محصول ثبت می کنم

3- حالا برای مشتری خرید میزنم

مثلا:
تعداد صفحه کلید تویی انبارم 5 تاست
مشتری با شناسه 1 - یکی از این صفحه کلیدها رو می خره
تویی دیتابیس میزنم 1 فروش و از تعداد کل یکی کم میکنم میشه 4 تا باقی
تویی دیتابیس و تیبل دومم: می زنم مشتری با شناسه 1 - 1خرید - محصول صفحه کلید



حالا می خوام گزارش بگیرم چندتا جنس فروختم به چه مشتری و کی؟!

تیبل دومم ------> کل صفحه کلید ها 4 ----- 1 صفحه کلید خریداری شده ----- بنام شناسه 1



فکر کنم به موضوع زیاد مربوط نباشه ولی این روش که من استفاده میکنم تویی خیلی از سورس دوستان مشاهده کردم و زیادهم سخت نیست

به هرحال اینم یک راه حل یود

موق باشید/.

gerdioz
یک شنبه 27 مهر 1393, 12:18 عصر
SELECT sum(geymate_kol) ,tBLKala.name_kala,TBLAnbar.VKH
FROM TBLAnbar INNER JOIN
TBLKala ON TBLAnbar.code_kala =TBLKala.code_kala
group by tBLKala.name_kala,TBLAnbar.VKH

MahmoodM30
یک شنبه 27 مهر 1393, 12:52 عصر
درست کار نکرد میخوام روش دیگه رو پیاده کنم فعلا

در کل ممنون از دوستان

مهرداد صفا
دوشنبه 28 مهر 1393, 16:03 عصر
درست کار نکرد میخوام روش دیگه رو پیاده کنم فعلا

در کل ممنون از دوستان

سلام.
فقط زمانی که نا امید بشید شکست می خورید!
ویو رو با خودش join کنید و از اولین جدول ورودی ها و از دومی خروجی ها رو انتخاب کنید.
از left join استفاده کنید تا کالاهایی که ورودی داشته اند ولی خروجی نداشته اند رو نیز انتخاب کرده باشید.

به این صورت:


--بسم الله الرحمن الرحیم
--اللهم صل علی محمد و آل محمد

SELECT V1.Name, SUM(V1.vorood) AS voroodi, SUM(V2.vorood) AS khorooji
FROM view1 AS V1 LEFT OUTER JOIN
view1 AS V2 ON V1.Name = V2.Name AND V1.VHK = 1 AND V2.VHK = 0
GROUP BY V1.Name

در ضمن فراموش نکنید که اینجا تالار TSQL نییییییییییییست!