Tad*_*dej 1 sql sql-server sql-server-2008
我从我的SQL Server收到此错误消息:
列名称'价格'无效
在Microsoft SQL Server Management Studio中.
我的SQL语句:
SELECT
CASE
WHEN salePriceDate BETWEEN salePriceStartDate AND salePriceEndDate
THEN salePrice
ELSE
CASE
WHEN salePriceDate2 BETWEEN salePriceStartDate2 AND salePriceEndDate2
THEN salePrice2
ELSE normalPrice
END
END AS price
FROM
prices
WHERE
price BETWEEN 1 AND 100
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
SQL不允许使用在定义的别名SELECT将在WHERE条款(或大多数其他条款).这是SQL语言的一部分.
有多种方法可以解决这个问题.一种方法是子查询.另一个是CTE.SQL Server还提供横向连接:
SELECT p.*, v.price
FROM prices p OUTER APPLY
(VALUES (CASE WHEN p.salePriceDate BETWEEN p.salePriceStartDate AND p.salePriceEndDate
THEN p.salePrice
WHEN p.salePriceDate2 BETWEEN p.salePriceStartDate2 p.AND salePriceEndDate2
THEN p.salePrice2
ELSE p.normalPrice
END)
) v(price)
WHERE v.price BETWEEN 1 AND 100;
Run Code Online (Sandbox Code Playgroud)
另请注意,这简化了CASE表达式.没有必要筑巢CASE.