Solved

sql select problem - subquery returned too many values

Posted on 2006-07-14
2
433 Views
Last Modified: 2008-03-10
I have 2 tables Customers and Transactions.
Customers has a ref for each customer called InternalRef. We have a Supporter that also has an InternalRef as well as a SupportersRef which is linked back to Customers.InternalRef. That means they support that Customer.
A transaction can be made by both a Customer and a Supporter. If a Customer makes a transaction entry then their InternalRef is stored in the Transactions table. If a Supporter makes a Transaction entry then the supporters internal ref from the customers table is stored as a SupportersRef in the transactions table as well as the InternalRef of the Customer who they are supporting.

In both cases the customers InternalRef is stored in the Transactions table as InternalRef. Only if a supporter makes a transaction do we have an entry in Transactions.SupportersRef.

Customers Table:
InternalRef  Name SupportersRef   CustomerType
123             Jim    null                   Customer
124             Fred  123                   Supporter

Transactions Table:
InternalRef   SupportersRef   Amount
123              null                  10
123              124                  20

Customer Jim would see 2 transactions and supporter Fred would only see 1 transaction (the one with supportersref 124 in the Transactions table).

I want to return the 2 transaction for Jim - 1 with the name Jim and 1 with the name Fred, so that the customer knows where the transactions originated from.

Sample Jim sees the following:
Name       Amount  
Jim          10
Fred        20

Fred sees the following:
Name       Amount
Jim           20

I need the solution for Jim only as Fred is working fine.

Sample Query that works for Supporter Fred:

IF @CustomerType = 'Supporter'
BEGIN
select Transactions.InternalRef,Transactions.TransactionDate,Transactions.Amount,   Transactions.Description,Customers.SchoolOrSupporterName, Customers.SupportersRef, Customers.CustomerID
  from Transactions
  inner join Customers on Transactions.InternalRef = Customers.InternalRef
  where Transactions.SupportersRef = @Ref
  order by Transactions.TransactionDate DESC
END

I tried the following but did not work and gave the error subquery returned too many values:

IF @CustomerType = 'Customer'
BEGIN
select transactions.*, customers.*, IF (Transactions.SupportersRef IS NULL) BEGIN (select Customers.SchoolOrSupporterName from Customers inner join Customers on Transactions.InternalRef = Customers.InternalRef where Transactions.InternalRef = @Ref) END ELSE BEGIN (select c.SchoolOrSupporterName from Customers c inner join Customers on Transactions.SupportersRef = c.InternalRef where Transactions.InternalRef = @Ref) END AS CustomerOrSupporterName
..............
END
0
Comment
Question by:liaminnes
2 Comments
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 500 total points
ID: 17107074
select coalesce(sc.name, ic.name) as Name, t.name
from transactions t
left join customers sc
  on sc.internalref = t.Supportersref
left join customers ic
  on ic.internalrf = t.InternalRef
0
 

Author Comment

by:liaminnes
ID: 17107855
Thanks angelIII - that did the trick! - never knew about the coalesce function.
0

Featured Post

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Join & Write a Comment

Suggested Solutions

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 wondered why sometimes your SQL Server is slow or unresponsive with connections spiking up but by the time you go in, all is well? The following article will show you how to install and configure a SQL job that will send you email alerts includ…
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

759 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

24 Experts available now in Live!

Get 1:1 Help Now