【发布时间】:2011-12-29 14:51:54
【问题描述】:
我想设置一个条件来根据派生列的值对 SQL 数据进行排序,如下所示:
SELECT DISTINCT sp.ID
, sp.Status
, sp.Rank
, sp.Price
, sp.SalePrice
, sp.Width
, sp.Height
, sp.QOH
, (sp.SalePrice*sp.QOH) As 'sp.Value'
, (sp.Price*sp.QOH) As 'sp.StandardValue'
FROM table
WHERE -- Conditions
ORDER BY
CASE WHEN 'sp.SalePrice' > 0 THEN 'sp.Value' END DESC,
CASE WHEN 'sp.SalePrice' = 0 THEN 'sp.StandardValue' END DESC
出现此错误:
消息 145,第 15 级,状态 1,第 1 行
如果指定了 SELECT DISTINCT,则 ORDER BY 项必须出现在选择列表中。
如果我尝试
ORDER BY
CASE WHEN sp.SalePrice > 0 THEN (sp.SalePrice*sp.QOH) As "sp.Value" END DESC,
CASE WHEN sp.SalePrice = 0 THEN (sp.Price*sp.QOH) As sp.StandardValue" END DESC
给出错误:
关键字“As”附近的语法不正确。
如果我尝试从 cluase 的顺序中删除别名 * 并且只保留乘法部分,它就会开始给出相同的选择不同的错误
【问题讨论】:
-
WHERE条件中是否有任何子查询?我没有看到DISTINCT。您是否可能在某些时候包含了DISTINCT却忘记将其包含在您上面的问题中? -
我忘了在上面的代码中添加 DISTINCT,现在完成了
标签: sql sql-server sql-server-2008 select sql-order-by