【问题标题】:SUM CASE adding from joined table instead main tableSUM CASE 从连接表而不是主表添加
【发布时间】:2018-03-01 17:25:46
【问题描述】:

我有一个从客户那里检索的查询:

  • 在他的票上花费的时间总和(每张票可以有 1 次或多次干预)
  • 平均解析时间
  • 每张票的类别

查询:

SELECT SUM(f.duree) as total_time, SUM(timestampdiff(second, t.datec, t.date_close))/COUNT(distinct t.rowid) as average_resolution, COUNT(distinct t.rowid) as tickets, 
                SUM( CASE t.category_code WHEN 'WITHOUT_MAINTENANCE' THEN 1 ELSE 0 END) as sin_mantenimiento,
                SUM( CASE t.category_code WHEN 'WITH_MAINTENANCE' THEN 1 ELSE 0 END) as con_mantenimiento,
                SUM( CASE t.category_code WHEN 'WITH_BILLABLE_MAINTENANCE' THEN 1 ELSE 0 END) as con_mantenimiento_facturable,
                SUM( CASE t.category_code WHEN 'NO_BILLABLE_COASER_WARRANTY' THEN 1 ELSE 0 END) as no_facturable_garantia_coaser,
                SUM( CASE t.category_code WHEN 'OFERTADO' THEN 1 ELSE 0 END) as ofertado
                FROM llx_ticketsup as t
                JOIN llx_element_element as ee on ee.fk_source = t.rowid
                JOIN llx_fichinter as f on f.rowid = ee.fk_target
                WHERE t.fk_soc = 47 AND t.fk_statut = 8

在哪里

  • llx_ticketsup 是主门票表
  • llx_fichinter 是存储工单干预的表
  • llx_element_element 是工单和干预之间的表格

我的问题是,如果一张票有超过 1 次干预,则对类别类型的总和要知道有多少来自该类别以及有多少来自另一个,它将干预相加而不是票。例如,如果查询返回 2 张工单,总共有 6 次干预,则返回 6 个类别为 WITHOUT_MAINTENANCE 的工单,而不是 2 个类别为 WITHOUT_MAINTENANCE 的工单。

怎么了?谢谢。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    没有任何“错误”的预期行为尝试使用子查询来获取持续时间。像

    SELECT (select sum(f.duree) from llx_fichinter as f on f.rowid = ee.fk_target) as total_time, SUM(timestampdiff(second, t.datec, t.date_close))/COUNT(distinct t.rowid) as average_resolution, COUNT(distinct t.rowid) as tickets, 
                    SUM( CASE t.category_code WHEN 'WITHOUT_MAINTENANCE' THEN 1 ELSE 0 END) as sin_mantenimiento,
                    SUM( CASE t.category_code WHEN 'WITH_MAINTENANCE' THEN 1 ELSE 0 END) as con_mantenimiento,
                    SUM( CASE t.category_code WHEN 'WITH_BILLABLE_MAINTENANCE' THEN 1 ELSE 0 END) as con_mantenimiento_facturable,
                    SUM( CASE t.category_code WHEN 'NO_BILLABLE_COASER_WARRANTY' THEN 1 ELSE 0 END) as no_facturable_garantia_coaser,
                    SUM( CASE t.category_code WHEN 'OFERTADO' THEN 1 ELSE 0 END) as ofertado
                    FROM llx_ticketsup as t
                    JOIN llx_element_element as ee on ee.fk_source = t.rowid
    
                    WHERE t.fk_soc = 47 AND t.fk_statut = 8
    

    如果这不起作用,请将示例数据和预期结果作为文本添加到问题中,以便我们可以使用它。

    【讨论】:

    • 感谢您的回答,但此查询返回给我#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'on f.rowid = ee.fk_target)
    • 对不起,子查询中的 on 应该是 where。样本数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多