Solved

SQL Syntax

Posted on 2009-05-13
9
183 Views
Last Modified: 2012-05-06
I need to pull data out of a table which has many of the same accountIDs but I need to only get back a count of 1 for each account_id
Here is the syntax I have now and it is pulling back every instance of that accountID. So if accountID 123 is in the table 7 times I want to return 1

Select h.name, COUNT(*)
from document_requests dr
INNER JOIN document_request_accounts dra on dr.id = dra.document_request_id
INNER JOIN hospitals h on dr.hospital_id = h.id
GROUP BY h.name

Please help!!!
0
Comment
Question by:healthcheckinc
  • 3
  • 2
  • 2
  • +2
9 Comments
 
LVL 92

Expert Comment

by:Patrick Matthews
ID: 24380052
Hello healthcheckinc,

Select h.name, 1 AS [Count ]
from document_requests dr
INNER JOIN document_request_accounts dra on dr.id = dra.document_request_id
INNER JOIN hospitals h on dr.hospital_id = h.id
GROUP BY h.name

Regards,

Patrick
0
 

Author Comment

by:healthcheckinc
ID: 24380104
That just gives me a 1 in the column next to the hospital. I need a count of all the account_ids in there but do not need the account duplicates. Heres an example

acctID          hospital
123              ABC hospital
123              ABC hospital
234              ABC Hospital
567              ABC hospital

I would need the result set to look like the following
AcctIDCount    Hospital
3                      ABC Hospital


123 would only count as 1

Hope this helps
0
 
LVL 92

Accepted Solution

by:
Patrick Matthews earned 500 total points
ID: 24380123
OK, *now* I get it :)

Select h.name, COUNT(DISTINCT acctID)
from document_requests dr
INNER JOIN document_request_accounts dra on dr.id = dra.document_request_id
INNER JOIN hospitals h on dr.hospital_id = h.id
GROUP BY h.name
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:healthcheckinc
ID: 24380179
I still am not sure this is working correctly. Could there possibly be another way to write this?
0
 
LVL 57

Expert Comment

by:Raja Jegan R
ID: 24380500
Can you try this one out:

Select COUNT(acctID) as AcctIDCount, h.name
from document_requests dr
INNER JOIN document_request_accounts dra on dr.id = dra.document_request_id
INNER JOIN hospitals h on dr.hospital_id = h.id
GROUP BY h.name

Hope this helps
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 24380656
>>I would need the result set to look like the following
AcctIDCount    Hospital
3                      ABC Hospital
<<
So what happened to 567 ABC Hospital?

rrjegan17,

Not sure if you realize but the solution you posted, except for the alias, is identical to the query in the original question.  COUNT(*) =  COUNT(acctID)
0
 
LVL 9

Expert Comment

by:tculler
ID: 24380665
Alright, first of all, you're grouping by the wrong field. What a GROUP BY clause does is merge ALL matching fields into a single record that share that same field value. However, what exactly do you want to count? Just the total number of entries in the tables, the individual numbers of duplicates of each AccountID or Name, what? I can get you started, but I need more information. Try to be more specific in your question--what EXACTLY do you want to see in your query? How many fields? What should the fields be? What is the schema of the relevant tables?

Instead of grouping by h.name, group by account ID; in other words, ... GROUP BY tableName.AccountID, sustituting names for your names.
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 24380681
Actually on second thoughts matthewspatrick has given you the solution.  Here is the code to prove it:

Declare @Accounts table (
                              acctID varchar(10),
                              name varchar(50))

Insert @Accounts (acctID, name) Values ('123', 'ABC hospital')
Insert @Accounts (acctID, name) Values ('123', 'ABC hospital')
Insert @Accounts (acctID, name) Values ('234', 'ABC hospital')
Insert @Accounts (acctID, name) Values ('567', 'ABC hospital')


Select name, COUNT(DISTINCT acctID)
from @Accounts
GROUP BY name

Output:

name                                              
-------------------------------------------------- -----------
ABC hospital                                       3
0
 

Author Closing Comment

by:healthcheckinc
ID: 31581225
After reviewing the data your post was right. I appreciate it...

tculler - Take a xanax
0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

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

Suggested Solutions

Composite queries are used to retrieve the results from joining multiple queries after applying any filters. UNION, INTERSECT, MINUS, and UNION ALL are some of the operators used to get certain desired results.​
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.
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Via a live example, show how to extract information from SQL Server on Database, Connection and Server properties

809 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