在过去的 20 年里,我使用过许多数据库,并且只遇到过这种“有趣”类型的 SQL Server 隐式数据转换问题。
如果我创建一个带有一个小的 int 列的表并在其中插入两行值 1 和 2,然后运行以下查询“Select Avg(Column) From table”,我会得到一个截断的结果,而不是我会得到的 1.5来自地球上几乎任何其他 dB 的数据,它们会自动增大数据类型以存储整个结果,而不是截断/舍入到列数据类型。现在我知道我可以为每一种可能的情况解决这个问题,但不是一个好的动态解决方案,特别是对于使用数据分析产品的数据分析...... IE:Cognos/Microstrategy 等......
我在数据仓库中,并且有包含数百万行的事实表......我很想存储小列并获得适当的聚合结果。我目前解决这个细微差别的方法是将最小的可量化列定义为 Numeric(19,5) 以考虑所有情况,即使这些列多次只存储 1 或 0,tinyint 会很好但不会自然聚合出色地。
是否没有任何指令告诉 SQL Server 做所有其他数据库(oracle/db2/informix/access 等)所做的事情?哪个是推广到更大的类型并显示整个结果并让我对它们做我想做的事情?