PDA

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



vahid80
دوشنبه 17 بهمن 1384, 15:02 عصر
با سلام
مشکل من در sql این است که من جدولی با فیلدهای کد،تاریخ،تعداد دارم یعنی 1 کد می‎تواند چند مقدار تاریخ داشته باشد(مانند فروش یک جنس با کد خاص). حالا برای گزارش گیری از داده‎ها می‎خواهم داده‎هایی که تا تاریخ خاصی وارد شده‎اند را بر حسب کد جمع کنیم یعنی دقیقا با دستور SELECT-GROUP_HAVING ولی مشکل این است که شرط من بر حسب فیلد تاریخ است نه کد که با دستور HAVING بتوانم شرط را بنویسم یعنی مثال‎های زیر اشتباه هستند.
SELECT dates,code,sum(coun) from table1 group by code having dates<#datdate#[RIGHT]
راهی که به ذهن من رسید آن است که اول یک فیلتر روی جدول انجام داده و فاکتورهایی که تاریخ آنها قبل از تاریخ موردنظر است را بدست آورده در یک جدول بریزیم و از دستور group بعد از این کار استفاده کرده و سپس جدول را پاک کنیم. ولی راه خوبی نیست. آیا در شرط having میتوان از فیلد دیگری غیر از فیلدی که با آن گروه‎بندی می‎کنیم(code) استفاده کرد./RIGHT].
با تشکر

reza_rad
دوشنبه 17 بهمن 1384, 15:15 عصر
از date function ها نمی تونی استفاده کنی؟!
این هم توضیحات بیشتر:
http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/34010

vahid80
دوشنبه 17 بهمن 1384, 18:03 عصر
جناب آقای راد منظور شما این است که نمی‎توان از دستور شرطی غیر از فیلد کد که در واقع عمل جمع بر اساس آن انجام می‎شود استفاده کرد(مثلا تاریخ).
در صورتیکه جواب شما منفی است، راه حل فیلتر کردن بر حسب تاریخ و ریختن در جدول دیگر و سپس جمع کردن بر حسب کد الگوریتم مناسبی است؟
با تشکر

reza_rad
دوشنبه 17 بهمن 1384, 18:10 عصر
شما این شرط را در where clause بنویسید بعد آن را groupby id کنید.نباید مشکلی داشته باشه.

vahid80
دوشنبه 17 بهمن 1384, 18:16 عصر
ممکنه یک جمله مثالی برای من بگذارید.منظور شما اینطوریه
SELECT code,sum(coun) from table1 where dates<#(a date)# group by code
با تشکر

reza_rad
دوشنبه 17 بهمن 1384, 18:21 عصر
آره درسته.البته گفتم که به جای dates<#(a date)# می تونی از function هایی که لینکش رو فرستادم هم استفاده کنی.

vahid80
دوشنبه 17 بهمن 1384, 18:23 عصر
خیلی ممنون. کاملا حل شد.

reza_rad
دوشنبه 17 بهمن 1384, 18:25 عصر
خواهش می کنم.
موفق باشی