Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在SQL Server上运行时我的百分比为0?_Sql_Sql Server_Oracle - Fatal编程技术网

为什么在SQL Server上运行时我的百分比为0?

为什么在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

我正在构建以下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_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。