如何在javascript或MySQL中对pivot动态数组进行分组?

如何在javascript或MySQL中对pivot动态数组进行分组?,javascript,mysql,sql,node.js,pivot,Javascript,Mysql,Sql,Node.js,Pivot,基本上我想要透视动态数组,例如我从MySQL表中得到的数组: [ { ruleAlias: 'DEMAND', date: '2019-03-22', count: 10 }, { ruleAlias: 'VOUCHER', date: '2019-03-25', count: 20 }, { ruleAlias: 'DEMAND', date: '2019-03-25', count: 10 }, { ruleAlias: 'BILL', date: '2019-03-25', c

基本上我想要透视动态数组,例如我从MySQL表中得到的数组:

[ { ruleAlias: 'DEMAND', date: '2019-03-22', count: 10 },
  { ruleAlias: 'VOUCHER', date: '2019-03-25', count: 20 },
  { ruleAlias: 'DEMAND', date: '2019-03-25', count: 10 },
  { ruleAlias: 'BILL', date: '2019-03-25', count: 2 },
  { ruleAlias: 'BILL', date: '2019-05-06', count: 1 } ]
我希望此阵列成为:

[ ['RULE', 'DEMAND', 'VOUCHER', 'BILL'],
  ['2019-03-22', 10, 0, 0],
  ['2019-03-25', 10, 20, 2],
  ['2019-05-06', 0, 0, 1]
]
这是我使用的MySQL查询:

SELECT ruleAlias, date, count
FROM (
    SELECT ruleAlias, DATE_FORMAT(createDate, '%Y-%m-%d') AS date, COUNT(DATE_FORMAT(createDate, '%Y-%m-%d')) AS count FROM histPoint WHERE ruleAlias IN (SELECT alias FROM mstRule WHERE clientId = 5) AND YEAR(createDate) = YEAR(CURDATE()) GROUP BY date, ruleAlias
) AS t

我得到的数据是动态的,例如上面的数据是3个规则,但表中的数据可以得到3个以上的规则,如何将这种数组透视到javascript中的预期输出或直接透视到sql中?

您可以获取一个哈希表并收集给定日期/规则对的所有值。然后构建一个表,并对未给定的对使用默认零

const key=(…a)=>a.join(“|”);
var数据=[{ruleAlias:'DEMAND',date:'2019-03-22',count:10},{ruleAlias:'VOUCHER',date:'2019-03-25',count:20},{ruleAlias:'DEMAND',date:'2019-03-25',count:2},{ruleAlias:'BILL date:'2019-05-06',count 1}],
温度={},
结果,,
日期=新设置,
规则=新集合;
data.forEach({ruleAlias,date,count})=>{
日期。添加(日期);
rules.add(ruleAlias);
临时[键(日期,规则别名)]=(临时[键(日期,规则别名)]| | 0)+计数;
});    
结果=[
[‘规则’,……规则],
…数组.from(日期,日期=>[
日期,
…数组.from(规则,规则=>temp[键(日期,规则)]| | 0)
])
];
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
使用单个级别的
temp
散列,并生成一个键,例如
date+'\n'+ruleAlias
,可能会使这更简单一些。