Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Problem getting distinct value along with sums SQL Server

Posted on 2016-09-22
12
Medium Priority
?
95 Views
Last Modified: 2016-10-07
Let's say I run the following query:

SELECT        TOP (100) PERCENT Job, Total_Price, Invoice_Amount AS pri, hrs2 AS hrs, material3 AS mat, service2 AS ser, labor2 AS lab
FROM            dbo.V_Cust_Cost_Det_Inv_Date_B
WHERE        (Invoice_Date BETWEEN '9/1/16' AND '9/21/16')
ORDER BY Total_Price

Open in new window


It returns something like this:

Job / Total_Price / pri / hrs / mat / ser / lab
104591      5249.9900      4749.9900      26.589133      2078.7292      0.0000      439.6842
104591      5249.9900      500.0000      2.797928      218.7410      0.0000      46.2672

What I want is to be able to query the view and get sums of pri / hrs / mat / ser / lab but only the distinct value of Total_Price. I don't want them to sum. So far I have this which does not include the Total_Price:

SELECT        SUM(Invoice_Amount) AS pri, SUM(hrs2) AS hrs, SUM(material3) AS mat, SUM(service2) AS ser, SUM(labor2) AS lab
FROM            dbo.V_Cust_Cost_Det_Inv_Date_B
WHERE        (Invoice_Date BETWEEN '9/1/16' AND '9/21/16')

Open in new window


If somehow I could incorporate something like this into the query:

SELECT SUM(tpri) AS tpri FROM (SELECT DISTINCT Job, Total_Price AS tpri FROM V_Cust_Cost_Det_Inv_Date_B WHERE (Invoice_Date BETWEEN '9/1/16' AND '9/21/16')) AS derivedtbl_1

Open in new window


In the end this is what I want to see:

Job / Total_Price / pri / hrs / mat / ser / lab
104591      5249.9900      5249.9900      29.38706      2297.4702      0.0000      485.9514

Thanks in advance for your help.
0
Comment
Question by:princeservice
  • 6
  • 5
12 Comments
 
LVL 52

Expert Comment

by:Vitor Montalvão
ID: 41810569
Would this help?
SELECT  Job, SUM(Total_Price), SUM(Invoice_Amount) AS pri, SUM(hrs2) AS hrs, SUM(material3) AS mat, SUM(service2) AS ser, SUM(labor2) AS lab
FROM  dbo.V_Cust_Cost_Det_Inv_Date_B
WHERE  (Invoice_Date BETWEEN '9/1/16' AND '9/21/16')
GROUP BY Job
ORDER BY 2

Open in new window

0
 

Author Comment

by:princeservice
ID: 41810651
Vitor - You are summing the total price. That is what I am trying to avoid.
0
 

Author Comment

by:princeservice
ID: 41810654
I think I have solved it myself. I can just take the average of the total price.
0
Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

 
LVL 52

Expert Comment

by:Vitor Montalvão
ID: 41810662
It returns something like this:

 Job / Total_Price / pri / hrs / mat / ser / lab
 104591      5249.9900      4749.9900      26.589133      2078.7292      0.0000      439.6842
 104591      5249.9900      500.0000      2.797928      218.7410      0.0000      46.2672

In the end this is what I want to see:

 Job / Total_Price / pri / hrs / mat / ser / lab
 104591      5249.9900      5249.9900      29.38706      2297.4702      0.0000      485.9514

Looks to me a SUM of the above lines.
Can you share your solution so I can understand what was really the requirement?
0
 

Author Comment

by:princeservice
ID: 41810664
Vitor, The end result was summing the pri column, not the total_price column.
0
 
LVL 52

Expert Comment

by:Vitor Montalvão
ID: 41810679
Mostly all columns but the total_price column, right?
0
 

Author Comment

by:princeservice
ID: 41810683
Nevermind, I do not have it solved
0
 
LVL 52

Expert Comment

by:Vitor Montalvão
ID: 41810729
So, what do still missing?
0
 

Author Comment

by:princeservice
ID: 41810957
I probably need to expand on the question. I did not give you enough information. Let's start over:

Let's say I run the following query:

SELECT        TOP (100) PERCENT Job, Total_Price, Invoice_Amount AS pri, hrs2 AS hrs, material3 AS mat, service2 AS ser, labor2 AS lab
FROM            dbo.V_Cust_Cost_Det_Inv_Date_B
WHERE        (Invoice_Date BETWEEN '9/1/16' AND '9/21/16')
ORDER BY Total_Price

It returns something like this:

Job / Total_Price / pri / hrs / mat / ser / lab
104589      5698.2564      5698.2564      124.5633      1255.3665      0.0000      655.5556
104590      12345.0000      12345.0000      3232.23     111.1255      0.0000     96.6600
104591      5249.9900      4749.9900      26.589133      2078.7292      0.0000      439.6842
104591      5249.9900      500.0000      2.797928      218.7410      0.0000      46.2672

What I want is to be able to query the view and get sums of pri / hrs / mat / ser / lab but only the distinct value of Total_Price GROUPED BY JOB. I don't want the Total_Price to sum because that number is the same for every similar job. So far I have this which does not include the Total_Price:

SELECT        SUM(Invoice_Amount) AS pri, SUM(hrs2) AS hrs, SUM(material3) AS mat, SUM(service2) AS ser, SUM(labor2) AS lab
FROM            dbo.V_Cust_Cost_Det_Inv_Date_B
WHERE        (Invoice_Date BETWEEN '9/1/16' AND '9/21/16')

If somehow I could incorporate something like this into the query (Please don't let this throw you off from a good solution. This might be the absolute wrong way to do it):

SELECT SUM(tpri) AS tpri FROM (SELECT DISTINCT Job, Total_Price AS tpri FROM V_Cust_Cost_Det_Inv_Date_B WHERE (Invoice_Date BETWEEN '9/1/16' AND '9/21/16')) AS derivedtbl_1

In the end this is what I want to see:

Job / Total_Price / pri / hrs / mat / ser / lab
104589      5698.2564      5698.2564      124.5633      1255.3665      0.0000      655.5556
104590      12345.0000      12345.0000      3232.23     111.1255      0.0000     96.6600
104591      5249.9900      5249.9900      29.38706      2297.4702      0.0000      485.9514

Notice that job 104589 and 104590 are fine because I never had to sum anything but job 104591 had two lines so I summed up everything from pri over but only took the distinct value of the Total_Price.

Hope this helps.

Thanks in advance for your help.
0
 
LVL 52

Accepted Solution

by:
Vitor Montalvão earned 2000 total points
ID: 41812086
So lets try a little variation of my first solution:
SELECT  Job, Total_Price, SUM(Invoice_Amount) AS pri, SUM(hrs2) AS hrs, SUM(material3) AS mat, SUM(service2) AS ser, SUM(labor2) AS lab
FROM  dbo.V_Cust_Cost_Det_Inv_Date_B
WHERE (Invoice_Date BETWEEN '9/1/16' AND '9/21/16'
GROUP BY Job, Total_Price
ORDER BY Job

Open in new window

0
 
LVL 52

Expert Comment

by:Vitor Montalvão
ID: 41833248
princeservice, any feedback on this question?
0

Featured Post

NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

Question has a verified solution.

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

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…
A Stored Procedure in Microsoft SQL Server is a powerful feature that it can be used to execute the Data Manipulation Language (DML) or Data Definition Language (DDL). Depending on business requirements, a single Stored Procedure can return differe…
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.

972 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