很抱歉,如果已经询问过,但我搜索过,无法看到解决方案。我在MSSQL Server 2008中有一个查询,如:
SELECT DISTINCT
ProcedureId
, UserId
, FacilityId
, LocationId
FROM ....
WHERE ....
ORDER BY CASE WHEN @sortByProcedure = 0 THEN NULL ELSE 1 END,
2,
3,
4
此查询出错:
如果SELECT DISTINCT为,则ORDER BY项必须出现在选择列表中 指定。
因为case..when子句正在发生,当我删除它时,它正在工作。我应该替换null那里使它工作?任何帮助将不胜感激。
感谢。
答案 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
答案 1 :(得分: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
;其他数据库确实允许使用该构造。)