在SELECT语句中使用count(*)over(…)语句中的计算列

在SELECT语句中使用count(*)over(…)语句中的计算列,select,count,sql-server-2014,calculated-columns,Select,Count,Sql Server 2014,Calculated Columns,我在SQL Server Management Studio 2014中有以下select语句: SELECT main.car_descr ,vari.engineCode ,count(*) over(partition by vari.engineCode) as quant FROM dbspareparts.dbo.stock as stock inner join fiord.dbo.store as main on s

我在SQL Server Management Studio 2014中有以下select语句:

   SELECT main.car_descr
          ,vari.engineCode
          ,count(*) over(partition by vari.engineCode) as quant
    FROM dbspareparts.dbo.stock as stock

    inner join fiord.dbo.store as main on stock.[id_store]=main.[id_store]

    where quant>2

    order by quant desc
当我执行时,我在指令上得到“无效列名”

where quant>2
为什么以及如何才能得到这份工作

我需要使用count(*)over(…)语句,因为这只是另一个较长查询的一部分

谢谢

select * from (SELECT main.car_descr
      ,vari.engineCode
      ,count(*) over(partition by vari.engineCode) as quant
FROM dbspareparts.dbo.stock as stock

inner join fiord.dbo.store as main on stock.[id_store]=main.[id_store]) as tbl

where quant>2

order by quant desc

在查询返回之前,quant不会被绑定为变量,因此您需要在内部查询中封装它,然后才能按它进行筛选。

在哪里可以找到更多这样的案例,并进行解释和解决?我需要研究这些案例,因为这不是我第一次在其中一个问题上绊倒,对于我来说,我还不清楚在查询结束时我必须考虑哪些计算。到目前为止,我已经在代码中解决了所有这些问题,多次生成变量并启动查询,将结果保存在一些变量中,然后在代码中使用它们,但在这里,我被迫在几个查询中生成所有内容,而无需代码。我可能会做以下练习:。也就是说,您实际上遇到了一个跨不同SQL数据库不一致的问题。我相信mysql允许您在初始查询中做您想要做的事情。