PDA

View Full Version : مشکل با Group



narsic
یک شنبه 07 آذر 1389, 17:24 عصر
با سلام
این SQL رو چه جوری میتونم درست کنم


select TOP 20
(select top 1 id from test WHERE mah = S.mah ) as id ,
(select top 1 sharh from test WHERE mah = S.mah ) as sharh ,
SUM(mablagh) as mablagh ,
mah
from test S
WHERE id NOT IN (select TOP 0 id from test group by mah order by id ASC)
group by mah
order by id ASC
اکثر فیلدها که از اسمشون مشخصه چی هستن اما فیلد ID فیلد اصلی من هست و باید برای Where ها هم ازش استفاده کنم .
در ضمن در حال حاضر این دستور خطا داره و کار نمیکنه .
جدولم جدول تست هست .
اما با کمک این Query میخوام به یه دسته بندی از اطلاعاتم بر اساس ماه ها برسم .
مشکل اصلی خودم اینه که نمیتونم صفحه بندی رو درست انجام بدم .
و اینم بگم که این کد توسط یک سیستم گزارش گیر ساخت شده باید Query بسیار انعطاف پذیر باشه .
ساختار این جدول :
id : auto number
sharh : char
mablagh : int
mah : char
* من اسم فیلد ها رو برای تشخیص سریع نوع در اینجا به این اسامی تغییر دادم .
با تشکر

Reza_Yarahmadi
یک شنبه 07 آذر 1389, 18:01 عصر
بصورت زیر امتحان کنید ببینید درست کار میکنه یا نه.


With h1 AS(
Select
MIN(Id) as Id ,
SUM(Mablagh) as Mablagh ,
Mah
From
Test
Group By
Mah
)
Select TOP 20
h1.Id,
h1.Mablagh,
h1.Mah,
t.Sharh
From
h1 inner Join Test t
On
h1.Id = t.Id
Order By
h1.Id

narsic
یک شنبه 07 آذر 1389, 20:25 عصر
جناب یار احمدی متاسفانه کد شما خطا داره رو کلمه With خطا میگیره ، البته من از SQL Server 2000 استفاده میکنم در حال حاضر امکان تست برروی نسخه بالاتر رو ندارم اما اگه کدی باشه که با نسخه بالاتر کار کنه هم ممنون بگید .
در هر صورت من اطلاعات آزمایشی بانک به همراه ساختار رو ضمیمه کرم .
ممنون میشم دوستان تست کنن .

Reza_Yarahmadi
دوشنبه 08 آذر 1389, 09:50 صبح
شما داده های جدول و ساختارش رو گذاشتید و خروجی مورد نظرتون رو نذاشتید. کوئری زیر بر اساس حدسیات خودم نوشته شده.


Select *, IDENTITY(int, 1, 1) as Id2 Into #Temp From Test
Select TOP 20
t.Id,
h1.Mablagh,
h1.Mah,
t.Sharh
From
(Select
MIN(Id2) as Id2 ,
SUM(Mablagh) as Mablagh ,
Mah
From
#Temp
Group By
Mah) h1 inner Join #Temp t
On
h1.Id2 = t.Id2
Order By
h1.Id2
Drop Table #Temp

narsic
دوشنبه 08 آذر 1389, 15:53 عصر
شما داده های جدول و ساختارش رو گذاشتید و خروجی مورد نظرتون رو نذاشتید. کوئری زیر بر اساس حدسیات خودم نوشته شده.

دوست عزیز اول از توجهتون ممنون .
چیزی که من میخوام اینه که از اطلاعات این جدول خروجی بگیرم به شکل زیر
خروجی بر اساس اسامی ماه دسته بندی بشه (group) و همچنین صفحه بندی هم بشه مثلا در هر بار فراخوانی 5 رکورد نمایش داده بشه بعد 5 رکورد بعدی (فیلد ID هم فیلد ایندکس هستش) .
با تشکر

Reza_Yarahmadi
سه شنبه 09 آذر 1389, 07:27 صبح
دوست عزيز در مورد دسته بندي فكر كنم دستوري كه گذاشتم همون طوري كه ميخوايد انجام ميده ، در مورد صفحه بندي هم بارها توي همين تالار مطرح شده و روشهاي زيادي براير اين كار معرفي شده ، با يك جسجتو 1 دقيقه اي به جواب ميرسيد.