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

no9*_*no9 6 sql calculated-columns sql-server-2008 sql-view

这是我的情况:

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

- Price (decimal (15,4)
- TaxId (int)
Run Code Online (Sandbox Code Playgroud)

TaxId value 没有存储在任何地方,但只有两个值(实际上是 3)。

- 1 (8.5%)
- 2 (20%)
- NULL (no tax)
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

我去了类似的东西:

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...
Run Code Online (Sandbox Code Playgroud)

更新:

我已经成功地执行了查询。

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
Run Code Online (Sandbox Code Playgroud)

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

fan*_*nts 7

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

SELECT
Price * (1 + COALESCE(TaxId/100), 0) AS newValue
...
Run Code Online (Sandbox Code Playgroud)

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

PS: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...
Run Code Online (Sandbox Code Playgroud)