SQL Server在VIEW中添加带有条件的计算列

时间:2012-06-06 10:07:37

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

以下是我的情况:

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

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

TaxId值不存储在任何地方,但只有两个值(实际上是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)。我怎么设置它?

2 个答案:

答案 0 :(得分:4)

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

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

假设您的列中只有'8.5',而不是'8.5%'。是varchar还是没有?

P.S。: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...

答案 1 :(得分:0)

如果要计算的字段是突出数,并且它是基于计算的,则可以通过以下简单计算直接实现。

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

如果要计算的列是字符串,则可以使用sql CASE。 下面是一个布尔列被计算为“是”或“否”的示例

select CASE dbo.table1.Payment WHEN 1 THEN 'Yes' ELSE 'No' END AS 
PaymentText from dbo.table1