Oracle中查询数据库,使用了group by,因为所要查询的条件内的数据是恰好没有值的,所以结果显示为空值,但这不是我想要的,具体问题描述如下
- 例如我查询成功取票数(STATE = 1)为:
SELECT BOOK_TICKET_ITEM_ID, COUNT(1) AS SUCCESS_DRAW_NUMBER FROM T_BOOK_SESSION WHERE AREA_ID=10097 AND TO_DATE('2020-09-21 00:00:00', 'yyyy-mm-dd hh24:mi:ss') <= BOOKING_DATE ANDTO_DATE('2020-09-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss') >= BOOKING_DATE AND STATE = 0 GROUP BY BOOK_TICKET_ITEM_ID
显示结果为(也是正是我想要的结果类型):
但是我想要查找取消预约的票数(STATE = 2),就不能得到类似成功取票数的结果,sql为
SELECT BOOK_TICKET_ITEM_ID, COUNT(1) AS CANCEL_BOOK_NUMBER FROM T_BOOK_SESSION WHERE AREA_ID=10097 AND TO_DATE('2020-09-21 00:00:00', 'yyyy-mm-dd hh24:mi:ss') <= BOOKING_DATE AND
TO_DATE('2020-09-22 00:00:00', 'yyyy-mm-dd hh24:mi:ss') >= BOOKING_DATE AND STATE = 2 GROUP BY BOOK_TICKET_ITEM_ID
因为state=2,是确实没有记录的,而group by是要求要有记录才行,否则显示空值,就是如上图所示。而我期待的结果为BOOK_TICKET_ITEM_ID=113 , CANCEL_BOOK_NUMBER=0 这样一条结果记录。哪位大神帮告诉下解决方案,十分感谢。
回答
维度基数补充,给你两点建议。如果你所需要的维度基数过大,基数更新频率很低或者根本不更新,那么建议你生成一张维表,以这张维表作为主表去关联你的事实表,空值给0就可以了。如果维度基数很小或者是更新频率很快,那么就需要你手动去获取这个维度值。比如你的stat=2下没有113这个ID,那么你就需要手动生成一张维度表,让stat=2对应的有id113。或者从其它表中获取到有对应的全部维度。
以上是 Oracle中查询数据库,使用了group by,因为所要查询的条件内的数据是恰好没有值的,所以结果显示为空值,但这不是我想要的,具体问题描述如下 的全部内容, 来源链接: utcz.com/a/45272.html