2016-05-18 78 views
1

對不起,如果它已被詢問,但我搜索並無法看到解決方案。我在MSSQL服務器查詢2008,如:在使用select distinct時按NULL排序

SELECT DISTINCT 
ProcedureId 
, UserId 
, FacilityId 
, LocationId 
FROM .... 
WHERE .... 
ORDER BY CASE WHEN @sortByProcedure = 0 THEN NULL ELSE 1 END, 
        2, 
        3, 
        4 

此查詢給了一個錯誤:

​​

這是因爲case..when條款的發生,當我刪除它,它是加工。爲了讓它工作,我應該將其替換爲null?任何幫助,將不勝感激。

謝謝。

+0

將該CASE添加到選擇中,它將工作。 –

+0

我欣賞你是否顯示.. –

+0

我已經將它添加爲答案。 –

回答

1

您需要在select中包含該case語句以便能夠按它進行排序;

SELECT DISTINCT 
CASE WHEN @sortByProcedure = 0 THEN NULL ELSE 1 END SortField 
, ProcedureId 
, UserId 
, FacilityId 
, LocationId 
FROM .... 
WHERE .... 
ORDER BY 
CASE WHEN @sortByProcedure = 0 THEN NULL ELSE 1 END 
, ProcedureId 
, UserId 
, FacilityId 
, LocationId 
0

嘗試使用的列名和GROUP BY

Select ProcedureId, UserId, FacilityId, LocationId 
From .... 
Where .... 
group by ProcedureId, UserId, FacilityId, LocationId 
order by (case when @sortByProcedure = 0 then null else ProcedureId end), 
     UserId, FacilityId, LocationId 

order by的數字是(我認爲)棄用的含義的支持可能會消失的一天。在任何情況下,case中的「1」都不會被解釋爲列位置。

GROUP BY允許您在表達式中指定列名稱。 (我實際上驚訝列名不能用於select distinct;其他數據庫確實允許該構造。)