7

这是我的情况:

在我的表中有两个字段:

- Price (decimal (15,4)
- TaxId (int)

TaxIdvalue 没有存储在任何地方,但只有两个值(实际上是 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)。我该如何设置?

4

2 回答 2

6

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

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

假设您的列中只有“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...
于 2012-06-06T10:29:13.397 回答
0

如果你计算的字段是数字,它是基于计算的,它可以通过简单的计算直接实现,如下所示。

CREATE VIEW [dbo].[TestComputedViewColumn]
AS
SELECT   Tab1.Col1, Tab1.Col2, CONVERT(varchar, Tab1.Col1 + Tab2.Col2) AS 
[ComputedViewColumn]
FROM         Tab1 
GO

如果正在计算的列是字符串,那么它可以使用 sql CASE。下面是一个布尔列被计算为“YES”或“NO”的示例

select CASE dbo.table1.Payment WHEN 1 THEN 'Yes' ELSE 'No' END AS 
PaymentText from dbo.table1
于 2018-10-17T09:00:20.753 回答