我有以下查询:
SELECT
qryFoodInCases.fldCaseID,
qryFoodInCases.fldFood,
AteAttackRate,
NotAteAttackRate,
Round( AteAttackRate / NotAteAttackRate, 2 ) RelativeRisk
FROM
qryFoodInCases
LEFT JOIN
(
SELECT
qryNotAteInCase.fldCaseID,
qryNotAteInCase.fldFood,
COALESCE( qryNotAteAndGotSick.NotAteAndGotSick, 0 ) NotAteAndGotSick,
qryNotAteInCase.NotAteInCase
TotalNotAte,
100 * COALESCE( qryNotAteAndGotSick.NotAteAndGotSick, 0 ) / qryNotAteInCase.NotAteInCase NotAteAttackRate
FROM
qryNotAteInCase
LEFT JOIN qryNotAteAndGotSick ON qryNotAteInCase.fldFood = qryNotAteAndGotSick.fldFood
GROUP BY qryNotAteInCase.fldFood
) QA
ON qryFoodInCases.fldFood = QA.fldFood
LEFT JOIN
(
SELECT
qryFoodInCases.fldCaseID,
qryFoodInCases.fldFood,
COALESCE( qryAteAndGotSick.AteAndGotSick, 0) AteAndGotSick,
qryFoodInCases.fldFoodFrequency TotalAte,
100 * COALESCE( qryAteAndGotSick.AteAndGotSick, 0 ) / qryFoodInCases.fldFoodFrequency AteAttackRate
FROM
qryFoodInCases
LEFT JOIN qryAteAndGotSick ON qryFoodInCases.fldFood = qryAteAndGotSick.fldFood
GROUP BY
qryFoodInCases.fldFood
) QN
ON qryFoodInCases.fldFood = QN.fldFood
GROUP BY
qryFoodInCases.fldFood
ORDER BY
AteAttackRate DESC,
NotAteAttackRate
Run Code Online (Sandbox Code Playgroud)
注意:只有 select 语句的最后一个字段与此问题相关:
round(AteAttackRate/NotAteAttackRate,2) RelativeRisk
Run Code Online (Sandbox Code Playgroud)
返回以下记录
+-----------+------------+---------------+------------------+--------------+
| fldCaseID | fldFood | AteAttackRate | NotAteAttackRate | RelativeRisk |
+-----------+------------+---------------+------------------+--------------+
| 1 | Beans | 100 | 33 | 3 |
| 1 | Cabagge | 66 | 75 | 0 |
| 1 | fried fish | 66 | 75 | 0 |
| 1 | Banana | 50 | 80 | 0 |
| 1 | Pork | 50 | 100 | 0 |
| 1 | Chicken | 33 | 100 | 0 |
| 1 | Potatoes | 0 | 100 | 0 |
| 1 | Rice | 0 | 100 | 0 |
+-----------+------------+---------------+------------------+--------------+
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能获得字段 RelativeRisk 的十进制值
尝试:
select
...
round(AteAttackRate/cast(NotAteAttackRate as float),2) RelativeRisk
...
Run Code Online (Sandbox Code Playgroud)
这两个AteAttackRate和NotAteAttackRate是整数,所以AteAttackRate / NotAteAttackRate是整数太强了,round(AteAttackRate / NotAteAttackRate, 2)改变不了什么。您必须明确地强制转换为至少浮动一个数字以获得浮点商数。
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |