TSQL太奇怪了,它不';t在select中工作(但*-+;工作正常),但仅适用于一列

TSQL太奇怪了,它不';t在select中工作(但*-+;工作正常),但仅适用于一列,tsql,Tsql,我有一个很奇怪的问题: select **** COALESCE(Customers / (NULLIF(Visitors,0)),0) AS CR 对于3/3返回1 对于157/2,返回0 或任何其他非1将返回0 CR为十进制(8,2),对于所有其他列,同一行工作(不同列的混合) 我已经尝试了+-*,所有的工作都是正常的,但是只要我使用除法,它就不会返回值,除非是1 发生了什么事???为什么除法不起作用,而所有其他算术函数都很好。看起来它不会返回小数…无法复制您的结果,但这可能有助于澄清 示

我有一个很奇怪的问题:

select ****
COALESCE(Customers / (NULLIF(Visitors,0)),0) AS CR
对于3/3返回1 对于157/2,返回0 或任何其他非1将返回0

CR为十进制(8,2),对于所有其他列,同一行工作(不同列的混合)

我已经尝试了+-*,所有的工作都是正常的,但是只要我使用除法,它就不会返回值,除非是1


发生了什么事???为什么除法不起作用,而所有其他算术函数都很好。看起来它不会返回小数…

无法复制您的结果,但这可能有助于澄清

示例

Declare @T table (Customers int,Visitors int)
Insert Into @T values
(2,157),
(5,14),
(2,0),
(null,25),
(15,null)

select CR = IsNull((Customers+0.0) / nullif(Visitors,0),0)
 From  @T
返回

CR
0.012738853503
0.357142857142
0.000000000000
0.000000000000
0.000000000000

Hmm适用于其他选择,但将尝试它!Hmm给出了奇怪的结果(仅在INT+X.00中),但结果完全不正确),即2/157=2??或者5/14=5?被零除是个问题。CR是别名,不能具有类型。整数除法将返回一个整数。CR是列的名称,没有别名也不起作用。只是出于形式上的考虑,合并((NULLIF(TotalVisitors,0)/NULLIF(New,0)),0)作为XXX可以很好地工作这是可行的,但是我无法理解为什么它在不同的select上可以很好地工作。我知道这和小数位数和精度有关,事实上其中一列已经是十进制;),无论如何,谢谢你举个例子。现在我知道:)@mike86完全失去了2/157并不等于2。你有没有在里面烤另一个凝聚体?@johncapelletti,一个有趣的技巧,将整数转换成数字。添加0.0的隐式转换与显式转换相比表现如何?@AnthonyHancock问得好。我想几乎没有什么不同,因为两种方式都在进行转换。然而,许多人更喜欢显式/精确。稍后,我将运行基准测试,并让您知道是否有性能方面的影响way@mike86如果您发布了失败的示例数据,那么您可能已经收到并回答了。