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)
提前致谢!
你根本不需要条件语句:
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)
将首先输出当前年份(如果存在),另一个之后输出.
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |