新晋玛龙 2020-09-23 10:54 采纳率: 100%
浏览 108
已采纳

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 AND 
TO_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 这样一条结果记录。哪位大神帮告诉下解决方案,十分感谢。

  • 写回答

3条回答 默认 最新

  • Keifei 2020-09-23 14:20
    关注

    维度基数补充,给你两点建议。如果你所需要的维度基数过大,基数更新频率很低或者根本不更新,那么建议你生成一张维表,以这张维表作为主表去关联你的事实表,空值给0就可以了。如果维度基数很小或者是更新频率很快,那么就需要你手动去获取这个维度值。比如你的stat=2下没有113这个ID,那么你就需要手动生成一张维度表,让stat=2对应的有id113。或者从其它表中获取到有对应的全部维度。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上