2016-05-18 1 views
1

申し訳ありませんが、既に尋ねられていますが、検索して解決策を見ることができませんでした。このクエリはエラーを与えている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句の起こっている、私はそれを削除すると、それは私のようなMSSQL Server 2008でクエリを持っていますワーキング。私はそれを動作させるためにnullを置き換える必要がありますか?どんな助けもありがとう。

ありがとうございました。

+0

このケースも選択に追加すると機能します。 –

+0

私はあなたが表示される場合、私は感謝します。 –

+0

私は答えとしてそれを追加しました。 –

答えて

1

このcase文をselectに含める必要があります。

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ための番号は(と思う)のサポートは、1日に消えることがありますことを意味廃止されました。いずれにしても、caseの「1」は列位置として解釈されません。

GROUP BYでは、式に列名を指定できます。 (実際にはカラム名はselect distinctには使用できません。他のデータベースではその構造体を使用できます)

関連する問題