SQL:在一个表中返回多个到多个

时间:2017-09-18 20:25:36

标签: mysql sql database

使用MySQL数据库我想存储不同"频道"的每日测量值:

date | channel | value
-----+---------+------
1.1. |     'A' |     1
1.1. |     'B' |     2
1.1. |     'C' |     3
2.1. |     'A' |     4
2.1. |     'C' |     5
3.1. |     'A' |     6
3.1. |     'B' |     7
3.1. |     'C' |     8
4.1. |     'A' |     9
4.1. |     'B' |    10
4.1. |     'C' |    11

每天都会插入当时可用的频道(在频道上方的表格中,' B'不在2.1上。)。每个频道每天不会有多个衡量标准,即(date,channel)始终是唯一的。

我的问题:
在一个表中检索该数据的SQL命令是什么,即结果如下:

date | A  | B  | C
-----+----+----+---
1.1. |  1 |  2 |  3
2.1. |  4 |  - |  5
3.1. |  6 |  7 |  8
4.1. |  9 | 10 | 11

可选任务:频道只是一个频道ID,另一个表将ID映射到频道名称。

(实际上我认为这是微不足道的,到处都有关于它的例子。但要么我的搜索引擎被破坏了,要么我试图在这里做一些奇怪的事情......)

注意:SQL Cross Tab Function无法解决此问题,因为我需要将结果放在单独的列中,而不是聚合成一列。

1 个答案:

答案 0 :(得分:2)

根据您的示例,您可以尝试这种方法

<dom-module id="parent-card">
    <template>
        <detail-card prop-color="{{propColor}}"></detail-card>
        <information-card prop-color="{{propColor}}"></information-card>
    </template>
</dom-module>
<script>
    class ParentCard extends Polymer.Element {
        static get is() {
            return 'parent-card';
        }
        static get properties() {
            return {
                propColor: {
                    type: String,
                    notify: false
                }
            };
        }
    }

    window.customElements.define(ParentCard.is, ParentCard);
</script>

结果

SELECT `date`,
       SUM(CASE WHEN channel_id = 'A' THEN `value` END) 'A',
       SUM(CASE WHEN channel_id = 'B' THEN `value` END) 'B',
       SUM(CASE WHEN channel_id = 'C' THEN `value` END) 'C'       
  FROM t
 GROUP BY `date`
 ORDER BY `date`