我创建了一个存储过程,我想在其中添加替代的order by子句。问题是查询在“无效的列名’aantal regels’”上失败
这是我现在的查询。
SELECT l.lead_id, l.afdeling_id, l.advertentie_id, l.naam, l.type, l.status, l.herkomst, l.aanmaakdatum, l.klant_id, l.overigegegevens, af.afdelingsnaam, (SELECT COUNT(lead_regel_id) FROM Lead_regel As lr Where Lr.lead_id = l.lead_id And lr.status <> 100 ) AS aantal_regels, (SELECT COUNT(lead_id) FROM Lead_unread As lu Where lu.lead_id = l.lead_id And lu.user_id = @uid ) As lead_ongelezen, (SELECT COUNT(lru.lead_regel_id) FROM Lead_regel As lr2 INNER JOIN Lead_regel_unread As lru ON lr2.lead_regel_id = lru.lead_regel_id Where lr2.lead_id = l.lead_id And lru.user_id = @uid And lr2.status <> 100 ) As lead_regel_ongelezen FROM Lead AS l INNER JOIN Afdeling AS af ON l.afdeling_id = af.afdeling_id WHERE l.afdeling_id = @aid AND l.status <> 100 ORDER BY CASE WHEN @orderby = 'default' THEN l.aanmaakdatum END DESC, CASE WHEN @orderby = 'type' THEN l.type END ASC, CASE WHEN @orderby = 'naam' THEN l.naam END ASC, CASE WHEN @orderby = 'reacties' THEN aantal_regels END DESC
希望有人可以帮助我!
您不能以这种方式按别名排序。
第一种选择是重复代码。注意:仅仅因为重复代码,SQL引擎就不会天真地再次执行它,而是重用了结果。
ORDER BY CASE WHEN @orderby = 'default' THEN l.aanmaakdatum END DESC, CASE WHEN @orderby = 'type' THEN l.type END ASC, CASE WHEN @orderby = 'naam' THEN l.naam END ASC, CASE WHEN @orderby = 'reacties' THEN (SELECT COUNT(lead_regel_id) FROM Lead_regel As lr WHERE Lr.lead_id = l.lead_id And Lr.status <> 100 ) END DESC
或全部使用子查询…
SELECT * FROM ( yourQuery ) AS sub_query ORDER BY CASE WHEN @orderby = 'default' THEN aanmaakdatum END DESC, CASE WHEN @orderby = 'type' THEN type END ASC, CASE WHEN @orderby = 'naam' THEN naam END ASC, CASE WHEN @orderby = 'reacties' THEN aantal_regels END DESC