Solved

SQL Find Customers who have not paid 100

Posted on 2014-09-23
6
116 Views
Last Modified: 2014-09-23
Hi
I have a Customers table and a Payments table, shown in that order below
What joined query would I use to find the CustID of those Customers who have
not paid an AMOUNT of 100. The [LINK ID] is the same as the CustID in CUSTOMERS

Customers
Payments
0
Comment
Question by:murbro
6 Comments
 
LVL 69

Expert Comment

by:Scott Pletcher
ID: 40339265
SELECT c.*
FROM (
    SELECT [Link Id]
    FROM Payments
    GROUP BY p.[Link Id]
    HAVING MAX(CASE WHEN Amount = 100.00 THEN 1 ELSE 0 END) = 0
) AS p
INNER JOIN Customers c ON
    c.CustID = p.[Link Id]
0
 
LVL 65

Expert Comment

by:Jim Horn
ID: 40339269
btw, you might have the image labels off, as the set labeled 'Customers' looks like a payments table, and vise versa

Looks like Scott answered it above.

Also, do yourself a favor and lose the spaces in the First Name, Last Name columns, as it forces T-SQL to delineate it using square brackets [ ], which is one thing to potentially forget and throw an error.
0
 
LVL 24

Expert Comment

by:Phillip Burton
ID: 40339270
I assume that these two tables are the wrong way round - the first one should be payments and the customers.

Select C.CustID, C.[First Name], C.[Last Name], Sum(Amount) as TotalAmount
From Customers C
LEFT JOIN Payments P
ON C.CustID = P.[LINK ID]
GROUP BY C.CustID, C.[First Name], C.[Last Name]
HAVING Sum(Amount) < 100 OR P.[LINK ID] IS NULL

Open in new window

0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 

Author Comment

by:murbro
ID: 40339315
Hi
Yes the two tables are the wrong way around. I was looking for Customers who have not paid the amount of 100 once(not in total).
0
 
LVL 24

Accepted Solution

by:
Phillip Burton earned 500 total points
ID: 40339324
Select C.CustID, C.[First Name], C.[Last Name], Max(Amount) as MaxAmount
From Customers C
LEFT JOIN Payments P
ON C.CustID = P.[LINK ID]
WHERE Max(Amount) < 100 OR P.[LINK ID] IS NULL
GROUP BY C.CustID, C.[First Name], C.[Last Name]

Open in new window

0
 

Author Closing Comment

by:murbro
ID: 40339784
Thanks for the help
0

Featured Post

Zoho SalesIQ

Hassle-free live chat software re-imagined for business growth. 2 users, always free.

Question has a verified solution.

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

Nowadays, some of developer are too much worried about data. Who is using data, who is updating it etc. etc. Because, data is more costlier in term of money and information. So security of data is focusing concern in days. Lets' understand the Au…
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed
Via a live example, show how to shrink a transaction log file down to a reasonable size.

863 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

Need Help in Real-Time?

Connect with top rated Experts

28 Experts available now in Live!

Get 1:1 Help Now