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)。我该如何设置?
是的,谷歌如何在 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)
| 归档时间: |
|
| 查看次数: |
37916 次 |
| 最近记录: |