Solved

SQL Syntax

Posted on 2009-05-13
9
184 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
Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

 

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

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.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
backup and restore 21 30
SSRS Deployment problem 5 66
Database Integrity 1 50
Help with my first SQL CLR table value function 2 11
I have a large data set and a SSIS package. How can I load this file in multi threading?
In this article we will learn how to fix  “Cannot install SQL Server 2014 Service Pack 2: Unable to install windows installer msi file” error ?
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Viewers will learn how the fundamental information of how to create a table.

828 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