sla*_*dau 15 t-sql sql-server sorting
有没有办法可以做类似的事情
@sortType
SELECT
*
FROM
table
ORDER BY
-- if sortType == id
table.Id
-- else if sortType == date
table.Date
Run Code Online (Sandbox Code Playgroud)
那句法怎么样?谢谢.
Mic*_*son 22
这里有一个问题...你不能在case语句中混合数据类型,因此你需要为不同的数据类型创建不同的case语句组.
SELECT
*
FROM
table
ORDER BY
CASE WHEN @SortType = id THEN table.Id END ASC,
CASE WHEN @SortType != id THEN table.Date END ASC
Run Code Online (Sandbox Code Playgroud)
相关博文:
http://dirk.net/2006/11/14/dynamic-order-by-with-case-statement-in-sql-server-data-type-issues/
尝试
ORDER BY
case when @sortType = 'id' then
table.Id
else
table.Date end
Run Code Online (Sandbox Code Playgroud)
警告:这就是说,出于性能原因,最好将其拆分或使用带有sp_executesql的动态sql
不要做那样的事情.生成的查询计划必须满足这两个条件,因为该计划是通用的,并且不依赖于@variables的特定运行时值.这样的计划将错过很多可能的优化.您应该明确地分开查询:
@sortType
if @sortType == id
SELECT
*
FROM
table
ORDER BY
table.Id
else if @sortType == date
SELECT
*
FROM
table
ORDER BY
table.Date
Run Code Online (Sandbox Code Playgroud)
这与尝试实现动态搜索条件的问题完全相同.在ORDER BY中使用CASE的语法糖实际上是一个查询优化阻止程序.
| 归档时间: |
|
| 查看次数: |
20019 次 |
| 最近记录: |