【问题标题】:flatten table into summary report with details in SQL (MySQL)在 SQL (MySQL) 中将表格展平为包含详细信息的摘要报告
【发布时间】:2013-05-07 17:49:28
【问题描述】:

是否可以使用 sql (mysql) 为报表展平数据库表。我可以用 php 做,但如果我能在 sql 中做的更简单,那就太好了。

示例:

1) 输入:原始数据 - 每个客户/开始和结束时间一行

cust   start   end
8000   0900    1000
8000   1000    1100
8000   1200    1300
9000   0900    1000
9000   1000    1100

2) 所需输出:数据扁平化 - 每个客户一行,所有开始和结束时间都在同一行

cust  all related start-end times
----  ------------------------------
8000  0900-1000 1000-1100 1200-1300
9000  0900-1000 1000-1100 

【问题讨论】:

    标签: mysql sql reporting summary


    【解决方案1】:

    这就是你要找的:

    select cust, group_concat(concat(start,'-',end) SEPARATOR ' ')
    from mytable
    group by cust
    

    请参阅working fiddle

    【讨论】:

    • 非常好!我以前从未见过这种语法。是否存在于其他平台?
    • 嗯,每个平台都有自己的做法,但任何一个像样的平台都应该能让你得到这样的结果
    【解决方案2】:

    SQL 查询必须有固定数量的列。这对您的情况造成了问题,因为您不知道需要多少列。

    一种解决方法是将所有结果放在一列中。这会产生类似“090-1000,1000-1100,1200-1300”的结果。你可以通过group_concat() 做到这一点:

    select cust,
           group_concat(concat(start, '-', end) separator ', ' order by start) as StartEnds
    from t
    group by cust
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多