PDA

View Full Version : حاصل جمع هر ستون با Selectهای جداگانه از ستونهای دیگر بدون استفاده از حلقه



salam007
چهارشنبه 24 خرداد 1391, 11:26 صبح
سلام
88205
در این جدول سه ستون کالا داریم (کالا1،کالا2،کالا3) که میخواهم حاصلجمع هر فیلد رو بصورت group by جداگانه بدست بیارم و در لیبلهایی بریزم .
بعنوان مثال میخام همزمان این جمعها با یک کلیک بدست بیان
1-حاصلجمع جداگانه ستونهای کالای1 و 2 و 3 در محدوده تاریخی مشخص جایی که انبار 1 و رنگ قرمز و سایز 20
2-حاصلجمع جداگانه ستونهای کالای1 و 2 و 3 در محدوده تاریخی مشخص جایی که انبار 1 و رنگ آبی و سایز 20
3-حاصلجمع جداگانه ستونهای کالای1 و 2 و 3 در محدوده تاریخی مشخص جایی که انبار 1 و رنگ زرد و سایز 20
4-حاصلجمع جداگانه ستونهای کالای1 و 2 و 3 در محدوده تاریخی مشخص جایی که انبار 2 و رنگ قرمز و سایز 20

و ...
به همین ترتیب که چیزی حدود 18 بار در این جدول با این اطلاعاتش هر ستون کالا باید جمع بخورد و در 18 لیبل نمایش داده میشود(هر ستون).دوستان حجم جدول از این بزرگتر است و من به نظرم آمد استفاده از حلقه for در برنامه ام زیاد جالب نیست به نظرم اگر بشود با دستورات sql اینکار را انجام داد سرعت فوق العاده بیشتری دارد .ممنون میشم کد مربوطه را در صورتی که انجام شدنی باشد با توضیحش بفرمایید .
نکته : من نمیخاهم ستون کالای 1 ،2 و 3 باهم دیگر جمع شوند بلکه میخاهم رکوردهای هر ستون در هر بار عملیاتی که انجام میشود جمع شوند و جداگانه نمایش داده بشوند

mohsen.net
چهارشنبه 24 خرداد 1391, 15:21 عصر
دستور select شما چیزی شبیه این هست

SELECT SUM(kala1),SUM(kala2),SUM(kala3)
FROM MyTable
WHERE anbar=1 AND Color='red' AND Size=20

حالا فقط باید تو کد با for قسمت where را دینامیک بسازی تا تمام حالات را پوشش بده

salam007
چهارشنبه 24 خرداد 1391, 15:39 عصر
ممنون
منم با دستور SUM مشکلی ندارم ، مشکل اینجاست من میخام بدون ورود اطلاعات خاصی (جز محدوده تاریخی) از کاربر این گزارشات ساخته شود و به نمایش در بیایند . یعنی ابتدا رکوردها یک چیزی شبیه group by در بیایند و سپس نسبت به group by های مختلف تشکیل شده در هر ستون حاصلجمع سه ستون کالا رو در بیارن (تعداد گروهها در سه ستون رنگها ،سایز و انبار نا مشخص است و فقط هر کدام را در جدول تعاریف اولیش داریم که ممکن است تعریف شده باشند اما وارد نشده باشند ). من اینکارو با FOR برنامم نمیخام انجام بدم اگر SQL میشود توضیحی بفرمایید .اگر اشکالی نداره در مورد نحوه دسترسی به حاصلجمعها (متغییری که در اون ریخته میشوند) هم در کد خودتون اشاره ای بفرمایید مثلا .
AS KALA1

baktash.n81@gmail.com
چهارشنبه 24 خرداد 1391, 16:57 عصر
سلام

به کد زیر یه نگاهی بنداز ... فکر کنم مشکلت رو حل کنه ... هر چند که یه مقدار گنگ بود مسئلتون ... خروجی مورد نظرتون رو بکشید اگه امکانش هست ...


select max(size),max(color),max(stock),sum(kala1),sum(kal a2),sum(kala3) from mytable group by size,color,stock Where [Date] between @date1 and @date2

fahimi
چهارشنبه 24 خرداد 1391, 17:21 عصر
فکر کنم مشکل شما با subquery حل بشه

salam007
پنج شنبه 25 خرداد 1391, 11:15 صبح
سلام

به کد زیر یه نگاهی بنداز ... فکر کنم مشکلت رو حل کنه ... هر چند که یه مقدار گنگ بود مسئلتون ... خروجی مورد نظرتون رو بکشید اگه امکانش هست ...


selectmax(size),max(color),max(stock),sum(kala1),s um(kala2),sum(kala3)from mytable groupby size,color,stock Where [Date] between @date1 and @date2



ممنون
خروجی مورد نظر تمام حالتهای هست که سه فیلد سایز ، رنگ و انبار میتوانن باهم داشته باشن . مثلا ما 3 تا انبار داریم 2 رنگ و 4 سایز مختلف که با این ما( 24= 3*2*4 ) حالت ممکنه داریم که باید 24 بار در این حالتها سه فیلد کالا جمع شوند .اگر باز هم نیازی به کشیدن خروجی هست بفرمایید که با مثال کاملا عرض کنم .

من کد شما رو برای برنامم تغییر دادم و تست کردم

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select max( size ),max(color),max(stock),sum(kala1),sum(kala2),sum( kala3)from mytable GROUP BY color , size , stock Where Date Between ' + QuotedStr(Edit1.Text) + ' And ' + QuotedStr(Edit2.Text) ;
ADOQuery1.Open;

اما ارور میده "Incorect syntax near the keyword"where

salam007
پنج شنبه 25 خرداد 1391, 11:17 صبح
فکر کنم مشکل شما با subquery حل بشه

یکم بیشتر توضیح بدین

fahimi
پنج شنبه 25 خرداد 1391, 19:05 عصر
مثال زیر یک نمونه از subquery است

SELECT Customer.CompanyName,
(SELECT Min(OrderDate)
FROM Orders Order
WHERE Order.CustomerID = Customer.CustomerID)
AS “Order Date”
FROM Customers Customer

baktash.n81@gmail.com
شنبه 27 خرداد 1391, 11:05 صبح
بله حق با شماست خطا داره ... چوووووووووووون اول باید Where رو بزاری بعد Group By



select max( size ),max(color),max(stock),sum(kala1),sum(kala2),sum( kala3)from mytable Where [Date] Between '1391/01/01' And '1391/02/01' GROUP BY color , size , stock