给出一个像这样的表:
| JobId | Result |
|-------|--------|
| 1 | true |
| 1 | false |
| 1 | true |
| 1 | |
| 2 | false |
| 2 | false |
| 1 | true |
| 1 | true |
| 1 | true |
SQL查询是否可以生成这样的输出?
[{JobId: 1, true: 2, false: 1, undefined: 1},
{JobId: 2, true: 3, false: 2, undefined: 0}]
我目前正在使用ORM Sequelize,但可以使用原始查询,这是我到目前为止所做的。
db.JobResponse.findAll({
where: {
jobId: job
},
attributes: ['JobId', [fn('sum', col('result'))]],
group: ['JobId']
}).then(result => {
res.status(200).send({
data: result
});
})
目前正在尝试sum
result
列,按JobId
进行分组,但是,结果是布尔值(预期值为true,false和undefined),所以简单求和不会工作。是否可以计算组内每个不同的值?
答案 0 :(得分:3)
我认为在查询结束时聚合true,false和undefined标签以及FOR JSON AUTO
的基本数据透视查询应生成所需的结果:
SELECT
JobId,
SUM(CASE WHEN Result = 'true' THEN 1 ELSE 0 END) AS true,
SUM(CASE WHEN Result = 'false' THEN 1 ELSE 0 END) AS false,
SUM(CASE WHEN Result IS NULL THEN 1 ELSE 0 END) AS undefined
FROM yourTable
GROUP BY JobId
FOR JSON AUTO; -- convert each result record to a JSON element inside an outer array []
我实际上无法对此进行测试,因为Rextester和SQLFiddle似乎都不支持SQL Server JSON扩展。但this useful tutorial似乎支持我给出的答案。