[英]“Invalid column name”, Order By on Alias of subquery
我已經創建了一個存儲過程,我想在其中添加一個替代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
簡短的版本是,雖然ORDER BY本身可以非常愉快地使用別名,但ORDER BY中的CASE語句卻不能。 CASE語句將作為SELECT的一部分進行評估,因此在考慮任何別名之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.