Question:
I am trying to query a database with the following:
SELECT DISTINCT SystemName, OwnerID, Location, Productver, StartDate, EndDate, ProjectNameFROM DevicesORDER BY SystemName
I only want to have the DISTINCT affect the values for ‘SystemName’; I don’t care what the values for the other variable are. In other words, I wish to get a query with the duplicate values for SystemName being eliminated by using DISTINCT and also obtain the values for the remaining fields (OwnerID, Location, Productver, StartDate, EndDate, ProjectName),with their duplicates being irrelevant.
Do I need to do a subquery or a join or what? I’ve tried this but it doesn’t work:
SELECT OwnerID, Location, Productver, StartDate, EndDate, ProjectName DISTINCT SystemNameFROM DevicesORDER BY SystemName
Answer:
As you found out, DISTINCT affects all the columns in the SELECT statement. In other words, it returns records where all the columns together are a unique value. You can’t specify a single distinct column plus any other columns, because if there were three records with the same value for SystemName, and varying values for the other columns, the query would not know which data to return for the remaining columns.
If the data is the same in the other columns, using DISTINCT shouldn’t be a problem. If the remaining columns have varying data and you want to return the additional columns, for example in a recordset, you could set the values in the query like this:
SELECT DISTINCT systemname, ownerid=null FROM devices
If you have this data:
systemname ownerid ---------- -------ABC 123ABC 123ABC 345DEF NullDEF 456
The above query would return:
systemname ownerid ---------- -------ABC NULLDEF NULL