我有一个名为TABLE_A的表,它有一个名为Unitcost的列,它是money数据类型,我必须通过((Cost / Pack)* Count更新Unitcost),其中这些Cost,Pack和Count是TABLE_A中的其他列
Note: Unitcost is Money
Cost is Money
Pack is int
Count is nvarchar
TABLE_A最终输出应该与更新的Unitcost
一样ID | Cost | Pack | Count | Unitcost
----------------------------------------------
01 | 12 | 1 | 1 | $12
01 | 12 | 2 | 1 | $6
01 | 40 | 4 | 2 | $20
01 | 12 | 1 | 2 | $24
' $'符号应该带有值的Unitcost列。我需要一个查询。请帮助。
答案 0 :(得分:3)
简短的回答是否定的,你不能在钱栏中存储$。可以使用以下代码证明:
declare @UnitCost money = '$3,257.14'
select @UnitCost -- It works but symbols like $ and , are removed. 3257.14 is returned in this case.
下面的代码段不是您要求的,但可能只是给您一些想法:
declare @UnitCost money = '3257.14'
select '$' + convert(varchar, @UnitCost, 1) -- Returns $3,257.14 as varchar.
现在,我建议您远离money / smallmoney数据类型,尽管名称显示,它们实际上不会提供比十进制数据类型更多的财务计算值。 Money / smallmoney也被称为整数分裂。有关详细信息,请参阅Throw Your MONEY Away 。
答案 1 :(得分:0)
您无法使用$ value更新Unitcost列,该值具有money数据类型。 当你编写一个Select Query时,你需要将$附加到Unitcost列。您的选择查询将是这样的。
select ID , Cost, Pack, Count, '$' + CONVERT(VARCHAR(50), Unitcost ) AS Unitcost from TABLE_A
其他重要注意事项你的Unitcost列基于其他列乘法。不需要在tabel中创建一个Unitcost列,因为它基于其他列乘法。你也可以使用这个选择查询
select ID , Cost, Pack, Count, '$' + CONVERT(VARCHAR(50), ((Cost/Pack)*Count) ) AS Unitcost from TABLE_A
希望这会对你有所帮助。
答案 2 :(得分:0)
UPDATE TABLE_A
SET Unitcost = ((Cost/Pack)*Count)
SELECT ID, Cost, Pack, Count,
'$' + CAST(Unitcost AS VARCHAR(50)) AS Unitcost
FROM TABLE_A
这假设Pack永远不会为零。