关于计数

时间:2017-04-25 11:14:47

标签: sql sql-server database sequelize.js

我不是UML /数据库图表中最好的,但以下有希望显示我的数据库设计(MsSQL)

enter image description here

我有一个“位置”表,其中包含零到多个托盘(一个位置有0个托盘)。但是,该位置可以是两种类型之一,位置x或y。此图简化了它,但是有许多不同类型的位置,每种类型都有非常不同的字段。

我使用Sequelize作为ORM,并试图弄清楚如何进行特定查询。我认为我很接近但很困难。

我需要的是:

选择一个LocationTypeX,其中“active”为true,其相应位置的托盘少于10个。

之前我已经离开并获得所有LocationTypeX,其中“active”为true。包括位置和托盘(在位置)并在代码中完成所有以确定哪个位置是相关的。然而,这需要永远,因为有成千上万的地方和托盘堆放出来。

我所追求的只是显示位置名称。这就对了。但是匹配上述条件的位置名称。希望有人可以提供帮助吗?

到目前为止我已经

models.Location.findAll({
  group: ['Location.id', 'Pallets.id'],
  attributes: ['Location.id', 'Pallets.id', [models.sequelize.fn('COUNT',models.sequelize.col('Pallets.id')), 'PalletCount']],
  include: [{
    model: models.Pallet,
    attributes: []
  }]
}).then((ret)=> {
  console.log(ret);
});

但是这不会进行“主动”检查。并且也没有对托盘数量做where子句。回到原点

1 个答案:

答案 0 :(得分:0)

我已经设法用原始SQL回答我自己的问题,我可以在Sequelize中使用。但是我仍然有兴趣知道如何在Sequelize

中做到这一点
models.sequelize.query(
  `SELECT TOP 1 Locations.id, Locations.name FROM LocationTypeX
  INNER JOIN Locations ON LocationTypeX.LocationId = Locations.id
  LEFT JOIN Pallets on (Locations.id = Pallets.LocationId)
  WHERE LocationTypeX.active = 1
  GROUP BY Locations.id, Locations.name
  HAVING COUNT(Pallets.id) < 3`
, { type: models.sequelize.QueryTypes.SELECT})