意外的NULL

时间:2015-09-17 16:55:42

标签: sql oracle

我正在尝试找出从采购订单数据库确认的项目数量。

数据库包含“是”或“否”,需要将其转换为数字,以便我可以看到已确认或未确认的项目总数。

数据类型为varchar2 R2 列中不应有NULL, R3 不应等于RESPONSE_COUNT。我正在使用ITEMID添加每个项目的总回复。

有关如何解决此问题的任何想法?

查询:

SELECT 
POSITION_NAME,
ORDER_NAME,
COUNT(SELECT RESPONSESTRING FROM ORDER_CONFIRM WHERE (RESPONSESTRING = RESPONSESTRING) AND (RESPONSESTRING LIKE 'NO')) AS R2, -- converting the string "no" to a number
COUNT(SELECT RESPONSESTRING FROM ORDER_CONFIRM WHERE (RESPONSESTRING = RESPONSESTRING) AND (RESPONSESTRING LIKE 'YES')) AS R3, -- converting the string "yes" to a number
TO_NUMBER(COUNT(DISTINCT ITEMID)) AS RESPONSE_COUNT
FROM ORDER_CONFIRM
WHERE ORDER_NAME LIKE 'XX.XX.MMYY'
AND RESPONSESTRING IS NOT NULL
HAVING TO_NUMBER(COUNT(DISTINCT ITEMID)) >= '5'
GROUP BY
POSITION_NAME,
ORDER_NAME
ORDER BY POSITION_NAME DESC;

Result:

POSITION_NAME | ORDER_NAME | R2 | R3 | RESPONSE_COUNT
======================================================
POSITION A    | XX.XX.MMYY | (null) | 5 | 5 
POSITION B    | XX.XX.MMYY | (null) | 5 | 5 
POSITION C    | XX.XX.MMYY | (null) | 8 | 8
POSITION D    | XX.XX.MMYY | (null) | 10 | 10

2 个答案:

答案 0 :(得分:0)

你有奇怪的数字转换(使用subselect是否有某些原因?)
希望你可以只使用
SUM(DECODE(RESPONSESTRING,'NO',1,0)) AS R2, - 计算'不' SUM(DECODE(RESPONSESTRING,'YES',1,0)) AS R3, - 计算'是' - s
在这种情况下,你不会得到'NULL'

答案 1 :(得分:0)

更新:在对数据库进行更多调查之后,我遇到了另一条获得我正在寻找使用CASE的结果的路径。我现在只使用数据库大约一个星期,所以我还没有完全理解细节。