继我之前的问题Case statement for Order By clause with Desc/Asc sort后,我有一个这样的陈述:
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
部分中的多个列。
答案 0 :(得分:16)
你需要这个吗?
ORDER BY
CASE @OrderByColumn WHEN 1 THEN Forename END DESC, Date, Location,
CASE @OrderByColumn WHEN 2 THEN Surname END ASC
答案 1 :(得分:13)
您可以编写多个案例,即使它们都具有相同的条件。
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'成为对这组行进行决定性排序。