Я думаю, это говорит само за себя. Вы не можете использовать предложение ORDER BY в своих подзапросах, потому что они не используют TOP или FOR XML.
При просмотре вашего кода я не уверен, что вижу код проблемы. Весь код выглядит правильно. Вы используете ORDER BY только в подзапросах, в которых также используется команда TOP, поэтому все они должны работать. Я бы закомментировал все команды ORDER BY, а затем добавил их по одной, пока вы не найдете ту, которая выдает ошибку. Может быть, они им не нравятся, потому что они являются подзапросами подзапроса.
Редактировать: Смотря на это снова, я думаю, что проблема в ваших высказываниях IN. Я не верю, что вы можете использовать подзапрос с ORDER BY, когда используете IN.
Вот код, который я бы попробовал:
SELECT TOP 10 *
FROM (
SELECT c.id, c.name, c.inserteddate, c.cityname, ftblstates.name AS statename, clc.name AS catname, '' AS listingimagelogo, '' AS orgname, relocateyn, '' AS employerclassified
FROM ((tblclassifieds c
LEFT JOIN tblclassifiedscategories clc ON c.categoryid = clc.id)
LEFT JOIN ftblstates ON c.stateid = ftblstates.id)
WHERE (c.expirydate != '') AND NOT c.id IN (
SELECT TOP 10 tblclassifieds.id
FROM tblclassifieds
WHERE (c.expirydate != ''))
UNION ALL
SELECT ce.id, ce.name, ce.inserteddate, suburb AS cityname, ftblstates.name AS statename, ce.jobtype AS catname, ce.listingimagelogo, ce.orgname, '' AS relocateyn, '1' AS employerclassified
FROM tblclassifiedemployers ce
LEFT JOIN ftblstates ON ce.stateid = ftblstates.id
WHERE (ce.expirydate != '') AND NOT ce.id IN (
SELECT TOP 10 tblclassifiedemployers.id
FROM tblclassifiedemployers
WHERE (ce.expirydate != '')))