【发布时间】:2015-09-15 16:25:18
【问题描述】:
我正在构建以下 Oracle SQL 查询。我试图获得在 2 个日期之间销售最多国际付款的销售人员。
我有以下查询
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,这是怎么来的?
【问题讨论】:
-
可以考虑使用 ratio_to_report 解析函数。
-
将两个计数添加为单独的字段,以确保除数不会太大以至于百分比小于 0.01%
-
预期百分比是 33.33 和 66.66,所以我认为这不能解决问题。
-
您是在问为什么该语句适用于 Oracle 而不适用于 SQL Server?
标签: sql sql-server oracle