对秩序的声明具有多个列和DESC/ASC条款排序
问题描述:
从我早期这里的问题Case statement for Order By clause with Desc/Asc sort继我有这样的语句:对秩序的声明具有多个列和DESC/ASC条款排序
SELECT
*
FROM
TableName
WHERE
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename END DESC,
CASE @OrderByColumnWHEN 2 THEN Surname END ASC
这个效果很好,但有时候我需要比列多按顺序排列。其实我需要的东西是这样的:
.....
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename, Date, Location END DESC
我不能工作了如何使CASE
声明允许在THEN
部分多列。
答
你需要这个吗?
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename END DESC, Date, Location,
CASE @OrderByColumn WHEN 2 THEN Surname END ASC
答
即使它们都具有相同的条件,也可以编写多个案例。
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename END DESC,
CASE @OrderByColumn WHEN 1 THEN Date END DESC,
CASE @OrderByColumn WHEN 1 THEN Location END DESC,
CASE @OrderByColumn WHEN 2 THEN Surname END ASC
实际上,您并未指定要排序的列,而是指定一个表达式。如果条件不满足
case语句返回null,所以实际上这意味着:
CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END
所以,如果@OrderByColumn不为1,则语句返回始终为NULL。顺便说一句,这并不排除它排序,但它将所有这些行放在结果中,使'SurName'对这组行进行决定性排序。