【问题标题】:Sqlite create view with totals from different tablesSqlite 使用来自不同表的总计创建视图
【发布时间】:2019-12-01 11:36:15
【问题描述】:

我有 3 个具有 identique 结构的表,如下 dpt1_taks、dpt2_tasks 和 dpt3_tasks。 这是每个(4列)的结构:

id | task_date | assigned | done
_________________________________
1  |01-11-2019 |     x    |  x
2  |01-11-2019 |     x    |     
3  |01-11-2019 |     x    |  x
1  |02-11-2019 |          |
1  |02-11-2019 |     x    |  x
1  |03-11-2019 |     x    |
1  |03-11-2019 |          |
1  |03-11-2019 |     x    |
1  |04-11-2019 |     x    |  x

如何创建一个 sqlite 视图,将每个表的每个日期的 count 分组如下:

DATE      | dpt1_assigned | dpt1_done | dpt2_assigned | dpt2_done |dpt3_assigned | dpt3_done |
_______________________________________________________________________________________________
01-11-2019|       3       |      2    |        5      |      3    |      4       |    0      |
02-11-2019|       1       |      1    |        5      |      3    |      4       |    0      |

提前感谢您的帮助和问候。

【问题讨论】:

    标签: sqlite view count


    【解决方案1】:

    每个表的结果必须单独计算,然后按日期连接:

    with 
      dates as (
        select task_date from dpt1_taks union  
        select task_date from dpt2_taks union
        select task_date from dpt3_taks 
      ),  
      cte1 as (
        select task_date,
          coalesce(sum(assigned = 'x'), 0) dpt_assigned,
          coalesce(sum(done = 'x'), 0) dpt_done
        from dpt1_taks
        group by task_date
      ),  
      cte2 as (
        select task_date,
          coalesce(sum(assigned = 'x'), 0) dpt_assigned,
          coalesce(sum(done = 'x'), 0) dpt_done
        from dpt2_taks
        group by task_date
      ),
      cte3 as (
        select task_date,
          coalesce(sum(assigned = 'x'), 0) dpt_assigned,
          coalesce(sum(done = 'x'), 0) dpt_done
        from dpt3_taks
        group by task_date
      )
    
    select d.task_date,
      c1.dpt_assigned dpt_assigned1, c1.dpt_done dpt_done1,
      c2.dpt_assigned dpt_assigned2, c2.dpt_done dpt_done2,
      c3.dpt_assigned dpt_assigned3, c3.dpt_done dpt_done3
    from dates d
    left join cte1 c1 on c1.task_date = d.task_date
    left join cte2 c2 on c2.task_date = d.task_date
    left join cte3 c3 on c3.task_date = d.task_date
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-30
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多