以下是我的情况:
在我的表格中我有两个字段:
- 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)。我怎么设置它?
答案 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