March 14, 2012 at 9:22 am
I have a table (JeffTest) that has two fields (Encounter, DocType).
How can I get the Encounter that does not have a DocType of '305'?
I'd expect the result to be 27242361 & 27242379.
Sample:
29182805-504
29182805-400
29182805229
29182805231
29182805305
29182805-503
27242361-400
27242361229
27242361-503
27242361231
27242379149
27242379-400
27242379229
27242379231
27242379-503
27242379-403
March 14, 2012 at 9:42 am
Hi
SELECT
Encounter
FROM
JeffTest
WHERE
Encounter NOT IN ( SELECT Encounter FROM JeffTest WHERE DocType = 305 )
Andy
==========================================================================================================================
A computer lets you make more mistakes faster than any invention in human history - with the possible exceptions of handguns and tequila. Mitch Ratcliffe
March 14, 2012 at 9:50 am
Great, thanks, I knew it was easy. I'm still learning.
Many Thanks!
March 14, 2012 at 9:50 am
Andy Hyslop (3/14/2012)
Hi
SELECT
Encounter
FROM
JeffTest
WHERE
Encounter NOT IN ( SELECT Encounter FROM JeffTest WHERE DocType = 305 )
Andy
If you only want to see the Encounter value once in the result set, I'd add the DISTINCT keyword to Andy's great response, as follows:
SELECT DISTINCT
Encounter
FROM
JeffTest
WHERE
Encounter NOT IN ( SELECT Encounter FROM JeffTest WHERE DocType = 305 )
Rob Schripsema
Propack, Inc.
March 14, 2012 at 9:52 am
Thanks Rob, yes that is needed.
March 14, 2012 at 9:53 am
If you only want to see the Encounter value once in the result set, I'd add the DISTINCT keyword to Andy's great response, as follows:
D'oh spot on! Forgot to add the DISTINCT! :Whistling:
==========================================================================================================================
A computer lets you make more mistakes faster than any invention in human history - with the possible exceptions of handguns and tequila. Mitch Ratcliffe
March 14, 2012 at 10:22 am
Another way
SELECT Encounter
FROM JeffTest
GROUP BY Encounter
HAVING MAX(CASE WHEN DocType = 305 THEN 1 ELSE 0 END)=0
____________________________________________________
Deja View - The strange feeling that somewhere, sometime you've optimised this query before
How to get the best help on a forum
http://www.sqlservercentral.com/articles/Best+Practices/61537March 15, 2012 at 9:16 am
Remember I said I'm still learning?
Can someone show me how to do this without using the temp db (all in one statement)? I know it is a nested select but I'm not clear on the syntax. This solution does work but I want to learn.
Thanks for any insight.
SELECT e.EncounterNo, e.EncntrStartDate, d.DocType, m.MedRecNo, ee.EnrolleeName
INTO #JeffTest --Temp Table
FROM Encounters e (nolock)
JOIN DocsOwners do (nolock) on e.EncntrOwnerId = do.OwnerId
JOIN Documents d (nolock) on do.DocId = d.DocId
JOIN MedicalRecords AS m (nolock) ON e.MedRecOwnerId = m.MedRecOwnerId AND e.MedRecModNum = m.MedRecModNum
JOIN dbo.Enrollees AS ee (nolock) ON m.EnrolleeOwnerId = ee.EnrolleeOwnerId
WHERE EncntrStartDate >= '12/01/2011 00:00:00' and EncntrStartDate <= '12/31/2011 23:59:59'
and e.SvcCode= 'EMR'
ORDER BY e.EncntrOwnerId
GO
SELECT DISTINCT EncounterNo, EncntrStartDate, MedRecNo, EnrolleeName
FROM #JeffTest
WHERE
EncounterNo NOT IN ( SELECT EncounterNo FROM #JeffTest WHERE DocType = 305 )
ORDER BY MedRecNo
GO
Hmm, I had to take out the Drop_Temp_Table command from the end to get the 'code' to post.
March 15, 2012 at 9:53 am
You can use a CTE
WITH JeffTest AS (
SELECT e.EncounterNo, e.EncntrStartDate, d.DocType, m.MedRecNo, ee.EnrolleeName
FROM Encounters e (nolock)
JOIN DocsOwners do (nolock) on e.EncntrOwnerId = do.OwnerId
JOIN Documents d (nolock) on do.DocId = d.DocId
JOIN MedicalRecords AS m (nolock) ON e.MedRecOwnerId = m.MedRecOwnerId AND e.MedRecModNum = m.MedRecModNum
JOIN dbo.Enrollees AS ee (nolock) ON m.EnrolleeOwnerId = ee.EnrolleeOwnerId
WHERE EncntrStartDate >= '12/01/2011 00:00:00' and EncntrStartDate <= '12/31/2011 23:59:59'
and e.SvcCode= 'EMR'
)
SELECT DISTINCT EncounterNo, EncntrStartDate, MedRecNo, EnrolleeName
FROM JeffTest
WHERE
EncounterNo NOT IN ( SELECT EncounterNo FROM JeffTest WHERE DocType = 305 )
ORDER BY MedRecNo
____________________________________________________
Deja View - The strange feeling that somewhere, sometime you've optimised this query before
How to get the best help on a forum
http://www.sqlservercentral.com/articles/Best+Practices/61537March 15, 2012 at 12:48 pm
Thank you Mark.
March 15, 2012 at 6:46 pm
rothj (3/15/2012)
Remember I said I'm still learning?Can someone show me how to do this without using the temp db (all in one statement)?
Actually, it's not always a good thing to try to do everything in a single query. You can end up with accidental many-to-many joins and other performance related problems.
If you end up with a "DISTINCT" in your query, such a problem may exist.
I've converted many a report from a grueling 45 minute run to a 3-8 second run by using Temp Tables and other "Divide'n'Conquer" methods.
--Jeff Moden
Change is inevitable... Change for the better is not.
March 15, 2012 at 7:29 pm
How about this option?
SELECT e.EncounterNo, e.EncntrStartDate, d.DocType, m.MedRecNo, ee.EnrolleeName
FROM Encounters e (NOLOCK)
JOIN DocsOwners do (NOLOCK) ON e.EncntrOwnerId = do.OwnerId
JOIN Documents d (NOLOCK) ON do.DocId = d.DocId
JOIN MedicalRecords AS m (NOLOCK) ON e.MedRecOwnerId = m.MedRecOwnerId AND e.MedRecModNum = m.MedRecModNum
JOIN dbo.Enrollees AS ee (NOLOCK) ON m.EnrolleeOwnerId = ee.EnrolleeOwnerId
WHERE EncntrStartDate >= '12/01/2011 00:00:00' AND EncntrStartDate <= '12/31/2011 23:59:59'
AND e.SvcCode= 'EMR'
AND NOT EXISTS (SELECT 1
FROM Encounters a
WHERE a.e.EncntrOwnerId = e.EncntrOwnerId
AND a.DocType = 305
)
March 15, 2012 at 7:51 pm
This above option will not work as DocType is not in Encounters. Using not exists is another option I was shooting for.
SELECT e.EncounterNo, e.EncntrStartDate, d.DocType, m.MedRecNo, ee.EnrolleeName
FROM Encounters e (NOLOCK)
JOIN DocsOwners do (NOLOCK) ON e.EncntrOwnerId = do.OwnerId
JOIN Documents d (NOLOCK) ON do.DocId = d.DocId
JOIN MedicalRecords AS m (NOLOCK) ON e.MedRecOwnerId = m.MedRecOwnerId AND e.MedRecModNum = m.MedRecModNum
JOIN dbo.Enrollees AS ee (NOLOCK) ON m.EnrolleeOwnerId = ee.EnrolleeOwnerId
WHERE EncntrStartDate >= '12/01/2011 00:00:00' AND EncntrStartDate <= '12/31/2011 23:59:59'
AND e.SvcCode= 'EMR'
AND NOT EXISTS (SELECT 1
FROM Encounters
JOIN DocsOwners WITH (NOLOCK)
ON Encounters.EncntrOwnerId = DocsOwners.OwnerId
JOIN Documents WITH (NOLOCK)
ON Documents.DocId = DocsOwners.DocId
WHERE Encounters.EncntrOwnerId = e.EncntrOwnerId
AND Documents.DocType = 305
)
Viewing 13 posts - 1 through 12 (of 12 total)
You must be logged in to reply to this topic. Login to reply