为什么在SQL Server上运行时我的百分比为0?
我正在构建以下Oracle SQL查询。我试图获得在两个日期之间销售国际付款最多的销售人员 我有以下疑问为什么在SQL Server上运行时我的百分比为0?,sql,sql-server,oracle,Sql,Sql Server,Oracle,我正在构建以下Oracle SQL查询。我试图获得在两个日期之间销售国际付款最多的销售人员 我有以下疑问 SELECT ddo.CODE as "Salesman ID", ROUND((count(fpp.ID) / (SELECT count(fpp2.ID) FROM Payments_Table fpp2 JOIN Clients_Table da2 ON fpp2.Client_ID = da2.ID JOIN Currency_Ta
SELECT ddo.CODE as "Salesman ID", ROUND((count(fpp.ID) /
(SELECT count(fpp2.ID)
FROM Payments_Table fpp2
JOIN Clients_Table da2 ON fpp2.Client_ID = da2.ID
JOIN Currency_Table dc2 ON dc2.ID = fpp2.CURRENCY_ID
WHERE dc2.CURRENCY_CODE != da2.CURRENCY
) * 100), 2) AS "% Different currency"
FROM Salesmen_Table ddo
JOIN Payments_Table fpp ON ddo.ID = fpp.DATA_OWNER_ID
JOIN Clients_Table da ON fpp.ORDERING_ACCOUNT_ID = da.ID
JOIN Currency_Table dc ON fpp.CURRENCY_ID = dc.ID
WHERE da.CURRENCY != dc.CURRENCY_CODE
GROUP BY ddo.CODE
根据国际支付数量的百分比,应该给出一个降序列表。例如:
- 销售员ID%不同货币
- 杰克66.66
- 约翰33.33
我的数据库中有3笔付款,2笔给杰克,1笔给约翰,所以这是我预期的结果。但是我的%的结果是0。这是怎么发生的?更新 造成这种差异的原因是Oracle的
整数本质上是数字(38,0)的别名。有一个相关的问题。除以两个整数实际上执行十进制除法,因此1/2将返回0.5
另一方面,SQL Server有几种整数类型(smallint、tinyint、int等),整数除法执行整数除法。1/2将返回0
原创
你在除整数。在整数除法中,结果本身就是一个整数。这意味着小于100%(即1)的百分比值变为0
在除法之前,应至少将一个操作数转换为浮点/十进制。这很简单,就是将股息乘以100.0
,例如:
ROUND( (100.0*count(fpp.ID)) / ...
您可以考虑使用RealoTotoToCo分析函数。将两个计数作为单独的字段添加,以确保除数不太大,百分比小于0.01%,预期百分比为33.33和66.66,因此我不认为这解决了问题。您是问为什么语句在Oracle上工作,而不是在SQL Server上工作?这不是正确-给出了一个包含两个整列(NUMBER(1,0)
)的表的示例,除法结果为十进制。@MT0当问题仍被标记为sql server
@Guil时,我回答了这个问题。您想做什么?在两个数据库上运行相同的查询?在SQL Server中,整数除法返回一个整数。正如MT0所指出的那样,oracle返回一个十进制数,原始查询应该可以正常工作。您是说我的查询与SQL Server不兼容吗?如果您试图在两个数据库中使用相同的查询,这并不是不兼容,只是整数除法的工作方式不同——或者说,oracle没有整数和整数除法,它有编号
,刻度为0。