Rah*_*jee 1 sql t-sql select sql-order-by sql-server-2008
如何在SQL中的计算字段上使用order by?
select a.Customer
,a.PlanTo
,a.Dollar01
,a.Dollar02
,a.Dollar03
,a.Dollar04
,a.Dollar05
,a.Dollar06
,a.Dollar07
,a.Dollar08
,a.Dollar09
,a.Dollar10
,a.Dollar11
,a.Dollar12
,(CAST(a.Dollar01 as decimal) + CAST(a.Dollar02 as decimal)
+ CAST(a.Dollar03 as decimal) + CAST(a.Dollar04 as decimal)
+ CAST(a.Dollar05 as decimal) + CAST(a.Dollar06 as decimal)
+ CAST(a.Dollar07 as decimal) + CAST(a.Dollar08 as decimal)
+ CAST(a.Dollar09 as decimal) + CAST(a.Dollar10 as decimal)
+ CAST(a.Dollar11 as decimal) + CAST(a.Dollar12 as decimal)) as TOTAL1
from MDM_STAT.sds.SMarginText a
where a.salesyear = '2016'
order by a.total1
Run Code Online (Sandbox Code Playgroud)
这给了我'Total1'列不存在,但正如你所见,我创建了它并且如果我没有使用该order by子句,它正在工作.
你可以做Mureinik建议的并使用序数符号ORDER BY 13,意思是"按第13列排序".不过,我会倾向于避免它,因为它很难告诉你什么打算,如果你回来以后订购的.此外,如果您需要添加列或更改顺序,则必须记住更新ORDER BY子句.这很容易错过.
正如其他人在评论中提到的那样,可以使用您在ORDER BY中指定的别名.但是,因为它是一个列别名,所以没有什么可以完全符合条件. a.TOTAL1没有任何意义.你必须ORDER BY TOTAL1:
select a.Customer
,a.PlanTo
,a.Dollar01
,a.Dollar02
,a.Dollar03
,a.Dollar04
,a.Dollar05
,a.Dollar06
,a.Dollar07
,a.Dollar08
,a.Dollar09
,a.Dollar10
,a.Dollar11
,a.Dollar12
,(CAST(a.Dollar01 as decimal) + CAST(a.Dollar02 as decimal)
+ CAST(a.Dollar03 as decimal) + CAST(a.Dollar04 as decimal)
+ CAST(a.Dollar05 as decimal) + CAST(a.Dollar06 as decimal)
+ CAST(a.Dollar07 as decimal) + CAST(a.Dollar08 as decimal)
+ CAST(a.Dollar09 as decimal) + CAST(a.Dollar10 as decimal)
+ CAST(a.Dollar11 as decimal) + CAST(a.Dollar12 as decimal)) as TOTAL1
from MDM_STAT.sds.SMarginText a
where a.salesyear = '2016'
order by total1
Run Code Online (Sandbox Code Playgroud)
这是因为查询解决顺序.SELECT之后解决ORDER BY,不像在SELECT之前解决的WHERE或FROM,因此不能引用SQL Server中的列别名.
如果列别名与表中的列具有相同的名称,则可能会造成混淆或模糊,因此您需要了解这一点.
将 Aaron Bertrand 的评论发布为社区 wiki,因为我认为这是最直接的答案:
a.total1不存在,因为 SQL Server 将在 中查找该列SMarginText,但ORDER BY TOTAL1;可以正常工作。
| 归档时间: |
|
| 查看次数: |
3843 次 |
| 最近记录: |