SQL Server 使用条件在 VIEW 中添加计算列

标签 sql sql-server-2008 calculated-columns sql-view

这是我的情况:

在我的表中,我有两个字段:

- Price (decimal (15,4)
- TaxId (int)
TaxId value 没有存储在任何地方,但只有两个值(实际上是 3)。
- 1 (8.5%)
- 2 (20%)
- NULL (no tax)

现在我需要在我看来计算列来计算含税的新价格。

任何的想法?

我去了类似的东西:
SELECT...
CASE TaxId
   WHEN 1 THEN Price *1.085 AS test
   WHEN 2 THEN Price *1.2 AS test
   WHEN NULL THEN Price  AS test END
FROM...

更新:

我已经成功地执行了查询。
CASE dbo.Table.TaxId WHEN 1 THEN dbo.Table.Price*1.085 WHEN 2 THEN dbo.Table.Price*1.2 ELSE dbo.Table.Price END AS CalcualtedPrice

现在我只需要将CalculatedPrice 设为十进制(15,4)。我该如何设置?

最佳答案

是的,谷歌如何在 SQL Server 中创建 View ,并在 View 的 SELECT 语句中将 Price 列与 TaxId 列相乘。由于您必须考虑 NULL 值,您应该使用 COALESCE像这样

SELECT
Price * (1 + COALESCE(TaxId/100), 0) AS newValue
...

假设您的列中只有“8.5”而不是“8.5%”。是不是varchar?

附注:COALESCE()返回第一个非空值

更新 问题编辑后:

你只需要稍微修改你的语法
SELECT 
CAST(
CASE 
   WHEN TaxId = 1 THEN Price *1.085
   WHEN TaxId = 2 THEN Price *1.2
   WHEN TaxId IS NULL THEN Price END AS decimal(15,4)
) AS CalculatedPrice
FROM...

关于SQL Server 使用条件在 VIEW 中添加计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10912127/

相关文章:

sql - 在 PostgreSQL 查询中使用别名返回 "column does not exist"

sql - postgres 更改表并插入行概率

mysql - 选择具有相同聚合值的所有行

sql - 如何找出在 SQL Server 中使用对主键的引用?

sql-server - 仅对非空列的唯一约束

java - 如何在java中调用带有结果集、输入、输出参数的SQL Server存储过程?

MySQL 将两列的差值计算成一个 Total 列

java - PreparedStatement 可以不考虑 WHERE 子句中的某些条件吗?

mysql - Sql 查询获取 Rails 中最受欢迎的帖子

html - 为什么在更改 JSP 和 HTML 中的代码后结果仍然相同?