First, the SQL Server query I’m using:
SELECT InfoSource FROM dbo.orders WHERE Price IS NULL AND Date IS NULL AND Expiry IS NULL GROUP BY InfoSource HAVING COUNT(InfoSource) = 1
Many records can have the same InfoSource value. I am attempting to return the value of any InfoSource where there is only and exactly one record that exists for that InfoSource, and the WHERE conditions are met within that one record.
The problem is, after I run this query, I take the results and do a SELECT statement on them just to verify the records meet the conditions, but many of the InfoSource values exist in more than one record. If there is more than one record for a given InfoSource, the query should not be returning that InfoSource at all regardless of the WHERE conditions.
Do I somehow have my GROUP BY and HAVING misplaced?
Advertisement
Answer
the query should not be returning that InfoSource at all regardless of the WHERE conditions
At the present, the where clause is executed before the having clause.
What you need is for it to be executed after.
select * from
dbo.orders
WHERE Price IS NULL
AND Date IS NULL
AND Expiry IS NULL
AND InfoSource in (SELECT InfoSource
FROM dbo.orders
GROUP BY InfoSource
HAVING COUNT(InfoSource) = 1)