我不太了解,我想澄清一下我认为它做了什么。
如果我有提供的排序类型,记录状态和会议日期:
我想默认按MeetingDate排序。 我想按排序类型为2,然后按会议日期按状态排序。
以下代码是否这样做?我的测试表明它确实如此,但我可能会遗漏一些东西。
SELECT Foo.*,
ROW_NUMBER() OVER (
ORDER BY
CASE @SortType WHEN 2 THEN Foo.FK_Status END ASC,
Foo.MeetingDate DESC
) AS RowOrder
更具体地说,如果@SortType为1,那么认为代码分解为:
是合适的SELECT Foo.*,
ROW_NUMBER() OVER (
ORDER BY
ASC,
Foo.MeetingDate DESC
) AS RowOrder
我认为可能会分解为:
SELECT Foo.*,
ROW_NUMBER() OVER (
ORDER BY
Foo.MeetingDate DESC
) AS RowOrder
与(当@SortType为2时)相反:
SELECT Foo.*,
ROW_NUMBER() OVER (
ORDER BY
Foo.FK_Status ASC,
Foo.MeetingDate DESC
) AS RowOrder
答案 0 :(得分:2)
CASE @SortType WHEN 2 THEN Foo.FK_Status END
相当于CASE @SortType WHEN 2 THEN Foo.FK_Status ELSE NULL END
。换句话说,如果@SortType = 1,则查询有效地为:
SELECT Foo.*,
ROW_NUMBER() OVER (
ORDER BY
NULL ASC,
Foo.MeetingDate DESC
) AS RowOrder
答案 1 :(得分:1)
RowOrder
列将位于描述的序列中,但在查询结尾没有order by
子句,则无法保证行的顺序被分类。
所以:
SELECT Foo.*,
ROW_NUMBER() OVER (ORDER BY
CASE @SortType WHEN 2 THEN Foo.FK_Status END ASC,
Foo.MeetingDate DESC) AS RowOrder
FROM Foo;
- 可以按任何顺序出现,而:
SELECT Foo.*
FROM Foo
ORDER BY CASE @SortType WHEN 2 THEN Foo.FK_Status END ASC, Foo.MeetingDate DESC;
- 将按照描述的排序顺序对输出进行排序(不包括RowOrder列)。