0

我有一个名为 TABLE_A 的表,其中有一列名为 Unitcost 的列是货币数据类型,我必须通过 ((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 列中。我需要一个查询。请帮忙。

4

3 回答 3

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 数据类型,尽管名称暗示了这些数据类型,但它们实际上并没有为金融计算提供比decimal 数据类型更多的价值。众所周知,Money/smallmoney 也会受到整数除法的影响。有关更多详细信息,请参阅扔掉你的钱

于 2013-05-07T12:12:07.390 回答
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 永远不会为零。

于 2013-05-07T12:00:33.097 回答
0

您不能使用具有货币数据类型的 $ 值更新 Unitcost 列。当您编写选择查询时,您需要将 $ 附加到 Unitcost 列。您的选择查询将是这样的。

select ID ,    Cost,    Pack,   Count,  '$' + CONVERT(VARCHAR(50), Unitcost ) AS Unitcost from TABLE_A 

其他重要说明您的 Unitcost 列基于其他列乘法。无需在表格中创建 Unitcost 列,因为它基于其他列乘法。您也可以使用此选择查询

select ID ,    Cost,    Pack,   Count,  '$' + CONVERT(VARCHAR(50), ((Cost/Pack)*Count) ) AS Unitcost from TABLE_A

希望这会帮助你。

于 2013-05-07T11:58:55.007 回答