Solved

Sql Server aggregation problem

Posted on 2013-05-21
3
306 Views
Last Modified: 2013-05-21
I have an interesting problem.  I have to present data with a single sql statement from invoice header and invoice transaction tables.

Here's my current SQL statement:
select 
Base.CASENO as [Matter Number],
INVOICES.INV_NO as [Invoice Number],
sum(INVTRANS.TRANS_AMT) as [Total Fees],
ISNULL(INVTRANS.TRANS_HOURS, '') as [Units],
CASE
	WHEN INVTRANS.TRANS_HOURS IS NULL THEN 0
	WHEN INVTRANS.TRANS_HOURS = 0 THEN 0
	ELSE INVTRANS.TRANS_AMT/INVTRANS.TRANS_HOURS 
END as [Rate],
INVTRANS.TRANS_AMT as [Item Total],
INVTRANS.INVTRANS_ID
from INVTRANS inner join INVOICES on INVTRANS.INVOICE_ID = INVOICES.INVOICE_ID
left outer join BASE on INVTRANS.MATTER_ID = BASE.MATTER_ID
group by
	base.CASENO, invoices.INV_NO, INVTRANS.TRANS_HOURS, INVTRANS.TRANS_AMT, INVTRANS.INVTRANS_ID
order by 2, 1

Open in new window


Here's the result I get from my data:
SQL table result
The problem is that the Total Fees column should be the sum of that column, where the invoice number and matter number are the same, redundantly shown for each row.  For example, in my image above, rows 5 & 6 are the same invoice number and matter number, and so each should show 60.00 (the total of Item Total for both rows).  And rows 8 and 9 should each have 150.00 as Total Fees, since they have the same invoice number and matter number.

Normally, this would be the invoice header record's total, but in this instance, my client needs the equivalent of a subtotal by matter number within the invoice numbers.

any ideas?
0
Comment
Question by:bjones8888
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 
LVL 48

Accepted Solution

by:
PortletPaul earned 500 total points
ID: 39186335
If I have understood your request I think sum(..) over (partiton by ...) would suit the need. Please try this
SELECT
      Base.CASENO AS [Matter Number]
    , INVOICES.INV_NO AS [Invoice Number]
    , sum(INVTRANS.TRANS_AMT) AS [Total Fees]
    , sum(INVTRANS.TRANS_AMT) OVER (
            PARTITION BY INVOICES.INV_NO, Base.CASENO
            ) AS [Total Fees Per Inv/Matter]
    , ISNULL(INVTRANS.TRANS_HOURS, '') AS [Units]
    , CASE 
        WHEN INVTRANS.TRANS_HOURS IS NULL
            THEN 0
        WHEN INVTRANS.TRANS_HOURS = 0
            THEN 0
        ELSE INVTRANS.TRANS_AMT / INVTRANS.TRANS_HOURS
        END AS [Rate]
    , INVTRANS.TRANS_AMT AS [Item Total]
    , INVTRANS.INVTRANS_ID
FROM INVTRANS
INNER JOIN INVOICES ON INVTRANS.INVOICE_ID = INVOICES.INVOICE_ID
LEFT JOIN BASE ON INVTRANS.MATTER_ID = BASE.MATTER_ID
GROUP BY
      base.CASENO
    , invoices.INV_NO
    , INVTRANS.TRANS_HOURS
    , INVTRANS.TRANS_AMT
    , INVTRANS.INVTRANS_ID
ORDER BY INVOICES.INV_NO, Base.CASENO

Open in new window

0
 

Author Closing Comment

by:bjones8888
ID: 39186347
Brilliant!  That's exactly what I needed.  

Thank you.
0
 
LVL 48

Expert Comment

by:PortletPaul
ID: 39186351
:) good guess then (kidding)
thanks

Cheers, Paul
0

Featured Post

Free eBook: Backup on AWS

Everything you need to know about backup and disaster recovery with AWS, for FREE!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
Load balancing is the method of dividing the total amount of work performed by one computer between two or more computers. Its aim is to get more work done in the same amount of time, ensuring that all the users get served faster.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question