Sql server 2008 SQL:在order case语句中使用别名

Sql server 2008 SQL:在order case语句中使用别名,sql-server-2008,alias,Sql Server 2008,Alias,我有一个(sql server 2008)查询,如下所示: Select *, column1+column2 as alias1 From complaints Order by Case When @param1 = 'filedate' then filedate When @param1 = 'calc' then alias1 End 这不起作用,因为不允许在case语句中对别名排序,它无法识别别名1 还有别的办法吗 谢谢最简单的答案: Select co

我有一个(sql server 2008)查询,如下所示:

 Select *, column1+column2 as alias1
 From complaints
 Order by 
 Case 
   When @param1 = 'filedate' then filedate
   When @param1 = 'calc' then alias1
 End
这不起作用,因为不允许在case语句中对别名排序,它无法识别别名1

还有别的办法吗

谢谢

最简单的答案:

 Select complaints.*, column1+column2 as alias1
 From complaints
 Order by 
 Case 
   When @param1 = 'filedate' then filedate
   When @param1 = 'calc' then column1+column2
 End


要么把它放在CTE里然后

; with cteQuery as (Select *, column1+column2 as alias1 from complaints)
SELECT * from cteQuery Order by 
Case 
   When @param1 = 'filedate' then filedate
   When @param1 = 'calc' then alias1
 End
或者只是复制别名实际指的内容

Select *, column1+column2 as alias1
 From complaints
 Order by 
 Case 
   When @param1 = 'filedate' then filedate
   When @param1 = 'calc' then column1+column2
 End

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它!谢谢,我喜欢CTE方法。我要试试看!非常感谢。在我的实际案例中,这是一个涉及地理位置的复杂公式。第一个解决方案是性能问题吗?看来第二种解决方案可以解决我的问题!我试试这个,然后告诉你。谢谢!在我的例子中,表达式很复杂,所以这可能会影响性能?我也不喜欢复制…我不知道性能如何,尽管通常情况下,磁盘访问比查询性能的计算要重要得多。Stuart第二次查询和Andrew第一次(基于CTE)查询中的子查询方法巧妙地消除了重复。
; with cteQuery as (Select *, column1+column2 as alias1 from complaints)
SELECT * from cteQuery Order by 
Case 
   When @param1 = 'filedate' then filedate
   When @param1 = 'calc' then alias1
 End
Select *, column1+column2 as alias1
 From complaints
 Order by 
 Case 
   When @param1 = 'filedate' then filedate
   When @param1 = 'calc' then column1+column2
 End