Below is my syntax. Im trying to only return the rows where assg.Hours_Act <> Sum(assh.HourEntry) for a specific callID’s HeatSeq.
In my having statement below you can see how I am attempting this, but no conversion that I’ve tried thus far has worked.
SELECT assg.CallID, assg.HEATSeq, assg.Hours_Act, SUM(assh.HourEntry) AS HourSum
FROM Heat.Dbo.asgnmnt AS assg
INNER JOIN heat.dbo.Assignment_Hours AS assh
ON assg.CallID = assh.CallID AND assg.HEATSeq = assh.HEATSeq
WHERE assg.Hours_Act IS NOT NULL
GROUP BY assg.callid, assg.HEATSeq, assg.Hours_Act
HAVING assg.Hours_Act <> CONVERT(VARCHAR(10),SUM(assh.HourEntry))
The issue is the precision of the SUM is creating a different value than what is in Hours_Act.
The assg.Hours_Act is a VARCHAR and the Sum(assh.HourEntry) returns a DECIMAL
Below is a screenshot of my results where you can see the issue:

EDIT: Final Working code:
SELECT assg.CallID, assg.HEATSeq, assg.Hours_Act, SUM(assh.HourEntry) AS HourSum
FROM Heat.Dbo.asgnmnt AS assg
INNER JOIN heat.dbo.Assignment_Hours AS assh
ON assg.CallID = assh.CallID AND assg.HEATSeq = assh.HEATSeq
WHERE assg.Hours_Act IS NOT NULL AND ISNUMERIC(assg.Hours_Act) = 1
GROUP BY assg.callid, assg.HEATSeq, assg.Hours_Act
HAVING CONVERT(DECIMAL(10,2), assg.Hours_Act) <> CONVERT(DECIMAL(10,2), SUM(assh.HourEntry))
@antisanity is correct. You can also try filtering out any rows where the assg.Hours_Act is not a numeric value. If you have any bad data stored, this could be causing the conversion issue. Just add to your WHERE clause:
Alternately, you could just select on the source data where ISNUMERIC = 0 to see if you have any bad data that needs cleaned.