根据另一个字段的内容显示特定的数字格式(货币,单位,...)(Access)

时间:2014-03-28 14:22:46

标签: sql ms-access

在报告中,我希望以特定格式显示数字(例如,数千,数百万,数十亿;不同的货币或单位符号),具体取决于不同列中指定的“数字类型”。 我找到了一个有效的解决方案(下图),但我想知道是否有更好的方法来实现它。

在表1中,每条记录都包含一个值和一个数字类型:

NumberType      Value
---------------------------
GDP             12300000000
LiteracyRate    0.95
Population      15000000

表2包含每种数字类型的格式信息,例如货币和单位符号:

NumberType    Prefix  Suffix  ScalingFactor
--------------------------------------------
GDP            $        
LiteracyRate           %       100
Population 

所需的输出如下所示:

NumberType     DisplayValue
-------------------------------
GDP            $ 12.3 Trillion
LiteracyRate   95 %
Population     15.0 Million

我的当前解决方案是创建一个SQL查询,我在其中创建一个计算字段DisplayValue。在计算字段I

  • 连接表2中指定的前缀和后缀
  • 与缩放系数相乘
  • 使用多个嵌套的IIF语句将数字显示为数千,数百万等。例如IIf([Value]>1000,round([Value]/1000,1)&" thousand",[Value])

我发现SQL语句很难阅读,我想知道是否有更优雅和高效的实现,可能使用格式化字符串。你有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果你有另一张桌子:

Range   RangeName       LowValue    HighValue
Low                     1           999
Million     Million     1000000     9999999999
Thousand    Thousand    1000        99999
Trillion    Trillion    10000000000 9999999999999

注意那些高价值,千万之后,我被美国数字纠缠在一起!

你可以说:

SELECT t1.NumberType, 
      [Prefix] & IIf(Nz([scalingfactor],0)>0,Val([value])*[scalingfactor],Val([Value]))/[lowvalue] & [suffix] & " " & [RangeName] AS DisplayValue
FROM t3, t1 
INNER JOIN t2 ON t1.NumberType = t2.NumberType
WHERE (((IIf(Nz([scalingfactor],0)>0,Val([value])*[scalingfactor],Val([Value]))) Between [lowvalue] And [highvalue]));

给出结果:

NumberType      DisplayValue
Population      15 Million
GDP             $1.23 Trillion
LiteracyRate    95% 

只要您记得重命名它们,您也可以使用报表控件做很多事情。以DlookUp为例。报告还允许您使用VBA和您自己的功能。