sql - 如何在带有 sequelize 的 where 子句中使用从嵌套表中提取的日期年份
问题描述
我尝试使用 sequelize 执行以下 mySql 查询,以从 Unite_Legales 表中获取聚合数据以构建选项卡。
SELECT legale.fk_tranche_effectif_effectifs_code,
legale.fk_nomenclature_naf_naf_code,
legale.categorie_entreprise,
COUNT(*) AS nb_etablissements
FROM Unite_Legales AS legale
JOIN Exercice_Comptables AS exo ON exo.fk_unite_legale_siren = legale.siren
WHERE ($ { whereClause })
AND exo.chiffre_affaire_net_total IS NOT NULL
AND YEAR(exo.date_cloture) = $ { year }
GROUP BY legale.fk_nomenclature_naf_naf_code,
legale.fk_tranche_effectif_effectifs_code,
legale.categorie_entreprise
ORDER BY legale.categorie_entreprise,
legale.fk_nomenclature_naf_naf_code;
我尝试了以下方法,但在嵌套 where 子句中提取年份时遇到问题。输出为空。
const answer = await unite_legales.findAll({
attributes: [
'fk_tranche_effectif_effectifs_code',
'fk_nomenclature_naf_naf_code',
'categorie_entreprise',
[Sequelize.fn('COUNT', '*'), 'nb_etablissements']
],
where: {
fk_nomenclature_naf_naf_code: nafs,
},
include: [{
model: db.Exercice_Comptables,
as: 'Unite_Legales_exercice_comptables',
required: true,
attributes: [],
raw: true,
where: {
chiffre_affaire_net_total: {
[Sequelize.Op.not]: null
},
date_cloture: {
[Sequelize.fn('YEAR', Sequelize.col('date_cloture'))]: 2019
}
}
}],
group: ['fk_nomenclature_naf_naf_code',
'fk_tranche_effectif_effectifs_code',
'categorie_entreprise'],
order: [
['categorie_entreprise', 'ASC'],
['fk_nomenclature_naf_naf_code', 'ASC'],
],
nested: true,
raw: true
})
我怎么能这样做?
我的模型是:
sequelize.define('Unite_Legales', {
siren: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true
},
fk_nomenclature_naf_naf_code: {
type: DataTypes.STRING(255),
allowNull: false,
references: {
model: 'Nomenclature_Nafs',
key: 'naf_code'
}
},
fk_tranche_effectif_effectifs_code: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Tranches_Effectifs',
key: 'effectif_code'
}
},
annee_effectif: {
type: DataTypes.DATE,
allowNull: true
},
denomination: {
type: DataTypes.STRING(255),
allowNull: false
},
date_creation: {
type: DataTypes.DATE,
allowNull: false
},
categorie_entreprise: {
type: DataTypes.STRING(255),
allowNull: true
},
annee_categorie_entreprise: {
type: DataTypes.DATE,
allowNull: true
}
}, {
sequelize,
tableName: 'Unite_Legales',
timestamps: true,
indexes: [
{
name: "PRIMARY",
unique: true,
using: "BTREE",
fields: [
{ name: "siren" },
]
},
{
name: "fk_nomenclature_naf_naf_code",
using: "BTREE",
fields: [
{ name: "fk_nomenclature_naf_naf_code" },
]
},
{
name: "fk_tranche_effectif_effectifs_code",
using: "BTREE",
fields: [
{ name: "fk_tranche_effectif_effectifs_code" },
]
},
]
});
和 :
sequelize.define('Exercice_Comptables', {
id: {
autoIncrement: true,
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true
},
fk_unite_legale_siren: {
type: DataTypes.INTEGER,
allowNull: false,
references: {
model: 'Unite_Legales',
key: 'siren'
}
},
date_ouverture: {
type: DataTypes.DATE,
allowNull: true
},
date_cloture: {
type: DataTypes.DATE,
allowNull: false
},
ventes_marchandises_france: {
type: DataTypes.INTEGER,
allowNull: true
},
ventes_marchandises_export: {
type: DataTypes.INTEGER,
allowNull: true
},
ventes_marchandises_total: {
type: DataTypes.INTEGER,
allowNull: true
},
production_vendue_biens_france: {
type: DataTypes.INTEGER,
allowNull: true
},
production_vendue_biens_export: {
type: DataTypes.INTEGER,
allowNull: true
},
production_vendue_biens_total: {
type: DataTypes.INTEGER,
allowNull: true
},
production_vendue_services_france: {
type: DataTypes.INTEGER,
allowNull: true
},
production_vendue_services_export: {
type: DataTypes.INTEGER,
allowNull: true
},
production_vendue_services_total: {
type: DataTypes.INTEGER,
allowNull: true
},
chiffre_affaire_net_france: {
type: DataTypes.INTEGER,
allowNull: true
},
chiffre_affaire_net_export: {
type: DataTypes.INTEGER,
allowNull: true
},
chiffre_affaire_net_total: {
type: DataTypes.INTEGER,
allowNull: true
}
}, {
sequelize,
tableName: 'Exercice_Comptables',
timestamps: true,
indexes: [
{
name: "PRIMARY",
unique: true,
using: "BTREE",
fields: [
{ name: "id" },
]
},
{
name: "fk_unite_legale_siren",
using: "BTREE",
fields: [
{ name: "fk_unite_legale_siren" },
]
},
{
name: "siren_cloture",
unique: true,
using: "BTREE",
fields: ["fk_unite_legale_siren", "date_cloture"]
}
]
});
具有以下关联:
Exercice_Comptables.belongsTo(Unite_Legales, { as: "Unite_Legales_exercice_comptables", foreignKey: "fk_unite_legale_siren" });
Unite_Legales.hasMany(Exercice_Comptables, { as: "Unite_Legales_exercice_comptables", foreignKey: "fk_unite_legale_siren" });
解决方案
推荐阅读
- sql-server - 在 SQL Server 中创建索引时如何动态附加文件组?
- dictionary - Vue 全球词典
- android - 尽管调用了 adapterlist.clear() ,但有时会得到空的 RecyclerVew 项目
- javascript - 停止 div 从大小增加中重叠另一个
- php - 遍历数组数组生成不需要的输出
- powershell - 在 cmd 提示符下使用管道运行 PowerShell cmd
- eclipse - 为什么复合由文本字段扩展?
- javascript - NodeJS 项目中 Jsonata 模块的使用
- python - 如何使用 Keras OCR 示例推断新图像?
- c# - 无法从复制的像素创建新位图