The problem is that when you have multiples, you have to decide for SQL which row to return - it doesn't know if you want "Cetirizine" to be "Allerzet 10mg" or "Alnix 10mg" and it hates to throw away information.
You can select the first or last:
SELECT MIN(ID) FROM ItemMasterlistTable GROUP BY [Generic Name] HAVING [Generic Name] IS NOT NULL
SELECT MAX(ID) FROM ItemMasterlistTable GROUP BY [Generic Name] HAVING [Generic Name] IS NOT NULL
And then use JOIN to retrieve the info you want:
SELECT g.ID, i.[Generic Name], i.Description
FROM (SELECT MIN(ID) as ID
FROM ItemMasterlistTable
GROUP BY [Generic Name]
HAVING [Generic Name] IS NOT NULL) g
JOIN ItemMasterlistTable i
ON g.ID = i.ID