ORDER BY,为第一个索引设置一个特定的案例?

exo*_*nic 1 sql sql-server sql-server-2008

使用SQL Server 2008 ...

我试图按照特定顺序订购我的行时遇到一些麻烦,我希望他们按顺序排序.我发现了一些使用该ORDER BY CASE子句的例子,但我不确定使用这种方法是否会产生我想要的结果,因此我来到了社区!

这就是我所拥有的:

首先,如果存在,我选择与当前年份相同的不同年份:

IF EXISTS(SELECT DISTINCT [Year]
FROM Assessment WHERE ProjectCode = @ProjectCode AND [Year] = DATENAME(YEAR, GETDATE()))

SELECT DISTINCT [Year]
FROM Assessment WHERE ProjectCode = @ProjectCode
Run Code Online (Sandbox Code Playgroud)

但是,我在排序结果时发现了一些困惑.我想将当前年份设置为使用该ORDER BY子句返回的第一行,然后按降序排列其余的返回年份,这是我到目前为止所做的:

ORDER BY (CASE WHEN [Year] = (DATENAME(YEAR, GETDATE())) THEN 1
          ELSE 100 END) ASC, [Year] desc
Run Code Online (Sandbox Code Playgroud)

接下来,如果查询中不包含当前年份,请选择每年并按年递减.

    ELSE
SELECT DISTINCT [Year]
FROM Assessment WHERE ProjectCode = @ProjectCode
ORDER BY [Year] desc
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Qua*_*noi 5

你根本不需要条件语句:

SELECT  *
FROM    (
        SELECT  DISTINCT [Year]
        FROM    Assessment
        WHERE   projectCode = @projectCode
        ) q
ORDER BY
        CASE [Year] WHEN YEAR(GETDATE()) THEN 1 ELSE 2 END,
        [Year]
Run Code Online (Sandbox Code Playgroud)

将首先输出当前年份(如果存在),另一个之后输出.