【问题标题】:MySQL: Pivot + CountingMySQL:枢轴+计数
【发布时间】:2010-08-24 23:45:48
【问题描述】:

我需要有关转换此表的 SQL 的帮助:

===================
| Id | FK | Status|
===================
| 1  | A  | 100   |
| 2  | A  | 101   |
| 3  | B  | 100   |
| 4  | B  | 101   |
| 5  | C  | 100   |
| 6  | C  | 101   |
| 7  | A  | 102   |
| 8  | A  | 102   |
| 9  | B  | 102   |
| 10 | B  | 102   |
===================

到这里:

==========================================
| FK | Count 100 | Count 101 | Count 102 |
==========================================
| A  | 1         | 1         | 2         |
| B  | 1         | 1         | 2         |
| C  | 1         | 1         | 0         |
==========================================

我可以如此简单地计数等,但我正在努力尝试使用派生的信息来旋转表格。任何帮助表示赞赏。

【问题讨论】:

    标签: sql mysql database pivot aggregate-functions


    【解决方案1】:

    用途:

      SELECT t.fk,
             SUM(CASE WHEN t.status = 100 THEN 1 ELSE 0 END) AS count_100,
             SUM(CASE WHEN t.status = 101 THEN 1 ELSE 0 END) AS count_101,
             SUM(CASE WHEN t.status = 102 THEN 1 ELSE 0 END) AS count_102
        FROM TABLE t
    GROUP BY t.fk
    

    【讨论】:

    • CASE WHEN t.status = 100 THEN 1 ELSE 0 END = IF(t.status = 100, 1, 0) = t.status = 100
    【解决方案2】:

    使用:

    select * from 
    (select fk,fk  as fk1,statusFK from #t
    ) as t
    pivot
    (COUNT(fk1) for statusFK IN ([100],[101],[102])
    ) AS pt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多