使用Sequelize ORM for Node.js,如何在select语句中使用CASE / WHEN表达式?
根据Sequelize文档,我看不到任何参考或示例来使用SQL表达式CASE。这可能吗?
这是我的示例:
的SQL
SELECT userId, Status,
MAX(CASE Type WHEN 'Employee' THEN Rate ELSE 0 END) AS "Employee",
MAX(CASE Type WHEN 'School' THEN Rate ELSE 0 END) AS "School",
MAX(CASE Type WHEN 'Public' THEN Rate ELSE 0 END) AS "Public",
MAX(CASE Type WHEN 'Other' THEN Rate ELSE 0 END) AS "Other"
FROM Database.dbo.invoice
WHERE Status IN ('Included', 'Excluded')
GROUP BY userId, Status
续集
var query = {
attributes: ['userId'], // need to include Rate (as Employee, School, Public, Other for each CASE/WHEN)
/*
MAX(CASE Type WHEN 'Employee' THEN Rate ELSE 0 END) AS "Employee",
MAX(CASE Type WHEN 'School' THEN Rate ELSE 0 END) AS "School",
MAX(CASE Type WHEN 'Public' THEN Rate ELSE 0 END) AS "Public",
MAX(CASE Type WHEN 'Other' THEN Rate ELSE 0 END) AS "Other"
*/
where: {
user: userId,
Type: ['Employee', 'School', 'Public', 'Other'],
},
group: ['userId'],
raw: true
};
models.invoice.findAll(query).then(result => {
console.log(result);
});
数据库结构
+--------+------+----------+
| userId | Rate | Type |
+--------+------+----------+
| 1 | 2.00 | Employee |
+--------+------+----------+
| 1 | 3.50 | School |
+--------+------+----------+
| 1 | 4.00 | Public |
+--------+------+----------+
| 1 | 2.50 | Other |
+--------+------+----------+
| 2 | 3.75 | Employee |
+--------+------+----------+
| 2 | 4.25 | School |
+--------+------+----------+
| 2 | 2.00 | Public |
+--------+------+----------+
| 2 | 3.00 | Other |
+--------+------+----------+
预期结果:
+--------+----------+--------+--------+-------+
| userId | Employee | School | Public | Other |
+--------+----------+--------+--------+-------+
| 1 | 2.00 | 3.50 | 4.00 | 2.50 |
+--------+----------+--------+--------+-------+
| 2 | 3.75 | 4.25 | 2.00 | 3.00 |
+--------+----------+--------+--------+-------+
您可以使用Sequelize.literal在attributes
建立特殊查询
var query = {
attributes: [
'userId',
[Sequelize.literal(`MAX(CASE Type WHEN 'Employee' THEN Rate ELSE 0 END)`), 'Employee'],
[Sequelize.literal(`MAX(CASE Type WHEN 'School' THEN Rate ELSE 0 END)`), 'School'],
[Sequelize.literal(`MAX(CASE Type WHEN 'Public' THEN Rate ELSE 0 END)`), 'Public'],
[Sequelize.literal(`MAX(CASE Type WHEN 'Other' THEN Rate ELSE 0 END)`), 'Other'],
],
where: {
user: userId,
Type: ['Employee', 'School', 'Public', 'Other'],
},
group: ['userId'],
raw: true
};
models.invoice.findAll(query).then(result => {
console.log(result);
});
我正在学习如何在NodeJs中使用Sequelize来访问MySQL数据库,但是在创建模型的时候,我被外键问题困住了。有谁能建议我如何申请吗?因为我试过一个,但还是出错了。 模型 exam_category.js exam.js 然后在app.js中我写了这样一个: 这是我的database.js。 错误 PS D:PracticeOtpFrontend&>;node.server.js inte
我在尝试使用lambda表达式时遇到了这个错误。
本文向大家介绍如何在TestNG中使用正则表达式?,包括了如何在TestNG中使用正则表达式?的使用技巧和注意事项,需要的朋友参考一下 我们在TestNG中使用正则表达式来使用以某种模式命名的一组测试方法。 示例 Testng xml文件。 所有名称开头为Payment的测试方法都将从回归套件中排除。 示例 Login()将被执行,但是所有以名字Payment开头的方法都将被排除在执行之外。这是使
问题内容: 我正在尝试实现一个接受字符串列表的Web服务,每个字符串都是一个正则表达式。需要将这些与数据库的六列进行比较,并且需要返回任何匹配的行。 我相信Oracle具有我可以使用的regexp_like()函数,但是我正在寻找使用Hibernate做到这一点的 最佳 方法,因此,我不反对持久性引擎。 我从这样的东西开始,其中参与者集合包含正则表达式: 这是行不通的,因为“输入”不会执行我想要的
问题内容: 我正在使用这样的构造: 但是我需要选择所有以“某些文本”开头的文本的链接,所以我想知道这里是否可以使用regexp?在lxml文档中找不到任何内容 问题答案: 您可以执行此操作(尽管该示例不需要正则表达式)。Lxml支持来自EXSLT扩展功能的正则表达式。(请参阅XPath类的lxml文档,但该方法也适用于该方法) 请注意,您需要提供名称空间映射,以便它知道xpath表达式中的“ re
问题内容: 我需要在python中使用sympy计算下面的表达式吗? 在中,这种情况下如何在python中使用sympy计算表达式?请帮我。 问题答案: 该文档位于:http : //docs.sympy.org/。您应该真正阅读它! 要“计算”您的表达式,请编写如下代码: 就是这样。如果通过“计算”表示其他含义,则还可以求解exp = 0: 对于其他所有内容,您应该真正阅读文档。也许从这里开始: