Hello my Crystal brother! Let me break this down into two sections for you.<br><br>1) Creating a report where the data is grouped by month will not be a problem. There is a Craze report that is installed as a sample if you have Seagate Info. I'm not sure if it is installed with Crystal Reports or not. The name of the report is Finstate.rpt and it shows a perfect example of a multi-column accounting style report. If you don't have it I will be glad to send you a variation of it that I have played with. <br><br>2) Creating a report where the data is grouped by all 12 months whether or not data exists for that month WILL be more difficult. Crystal doesn't allow you to dynamically show group names if no data is returned. If you created specific groups for each month, Crystal won't show the groups if no months are found that match the criteria. So, if I defined my first group to be "January" and the selection criteria for that group is <br><br>Month({MyDB.MyDateField}) = 1 <br><br>then Crystal MUST find a month that equals 1 to show the group name of "January".<br><br>Now, you can hard code the month labels on your report and hide and show those sections depending on whether or not data was returned - but this isn't a true group, its just a label that will be hidden or shown. <br><br>To get a true group to appear, regardless of data returned, you will have to go back to the stored procedure level where you can "trick" the Crystal report into thinking there is data for each month when there really isn't. dgaylor appears to be doing this in his stored proc code above.<br><br>If you don't mind having missing months where data is absent then the report will be easier.<br><br>Hope this helps - and let me know if you need a copy of the report I mentioned.<br><br><br> <p>Cody ford<br><a href=mailto:codyford@yahoo.com>codyford@yahoo.com</a><br><a href= > </a><br>VB, VBS, Seagate Info/Crystal Reports<br>