Hocam hiç müşterinizi üzmeyin.... Biraz zor da olsa, bazı katı kuralları da olacak olsa tarz bir çıktıyı almanız çok da zor degil..... Tabi kullandığınız veritabanı da çok önemli... Yani paradox filan sizi yarı yolda bırakabilir.... Hiç güvenmeyin. Eğer Firbird veya Interbase ise bir şekilde halledilir... Yok eğer Sybase ise zaten SQL cümlesi cepte

Şöyle ki:
Kod: Tümünü seç
Select MUSTERI,
SUTUN1=(Select isnull(sum(MIKTAR),0) from TABLO T1 where T1.MUSTERI=T.MUSTERI and T1.TARIH between '01-01-2003' and dateadd(day,-1,dateadd(month, 1, '01-01-2003'))),
SUTUN2=(Select isnull(sum(MIKTAR),0) from TABLO T1 where T1.MUSTERI=T.MUSTERI and T1.TARIH between dateadd(month,1,'01-01-2003') and dateadd(day,-1,dateadd(month, 2, '01-01-2003'))),
SUTUN3=(Select isnull(sum(MIKTAR),0) from TABLO T1 where T1.MUSTERI=T.MUSTERI and T1.TARIH between dateadd(month,2,'01-01-2003') and dateadd(day,-1,dateadd(month, 3, '01-01-2003'))),
SUTUN4=(Select isnull(sum(MIKTAR),0) from TABLO T1 where T1.MUSTERI=T.MUSTERI and T1.TARIH between dateadd(month,3,'01-01-2003') and dateadd(day,-1,dateadd(month, 4, '01-01-2003'))),
SUTUN5=(Select isnull(sum(MIKTAR),0) from TABLO T1 where T1.MUSTERI=T.MUSTERI and T1.TARIH between dateadd(month,4,'01-01-2003') and dateadd(day,-1,dateadd(month, 5, '01-01-2003'))),
SUTUN6=(Select isnull(sum(MIKTAR),0) from TABLO T1 where T1.MUSTERI=T.MUSTERI and T1.TARIH between dateadd(month,5,'01-01-2003') and dateadd(day,-1,dateadd(month, 6, '01-01-2003'))),
....
....
...
from TABLO T
group by MUSTERI
order by MUSTERI
Burada dateadd isimli bir fonksiyon kullandim. Sybase de var olan bu fonksiyon ile her ayin ilk ve son gununun arasındaki takistlerin toplamını yakaladık Yani
Kod: Tümünü seç
T1.TARIH between '01-01-2003' and dateadd(day,-1,dateadd(month, 1, '01-01-2003'))
TARHIH degeri 01-01-2003 ile bu tarihten 1 ay sonranın yani bir sonraki ayin 1. gunun 1 gun öncesi yani ilk ayın son gunu arasındaki degerleri filtrelemiş olduk...
isnull fonksiyonu ise eger o ay içinde bir taksit yok ise sonucun null değil de 0 olarak dönmesini sağlıyor....
Bu SQL cümlesi kolayca anlaşılacağı üzere bir tarihi parametre olarak alıp o tarihle başlayan ay ve ondan sonraki ayların raporunu veriyor... Ama kaç adet sutun yaparsanız o kadar ay sonrasını alabilirsiniz ve bu sabit olmak zorunda...
Sybase'e özel bu 2 fonksiyonun işlevini anladiktan sonra benzer işlevi mevcut veritabanınızda da gerçekleştirebilirsiniz zannediyorum....
Kolay gelsin....