0

我目前正在处理一个查询,该查询在查询中获取所有相关数据和库存水平,而不是分别循环遍历库存水平。到目前为止,我已经设法通过这样做获得了这些库存水平:

<cfquery datasource="datasource" name="get">
    Select *,
    (
        Select IsNull(Sum(stocklevel))
        From itemstock
        Where item_id = itemstock_itemid
    ) As stock_count
    From items
    Where item_id = #URL.item_id#
</cfquery>

现在我尝试在“Where”子句之后添加的术语是:

And get.stock_count > 0

然而,这只是抛出一个错误并说它不是一个有效的字段(这是有道理的)我想知道,我如何参考那个总和?

4

4 回答 4

2

您不能引用“获取”。在查询中。我想如果你只是参考 stock_count 你应该没问题?

于 2013-10-21T11:52:54.457 回答
2

要引用别名,请使用派生表:

select * from 
(Select *,
(
    Select IsNull(Sum(stocklevel), 0)
    From itemstock
    Where item_id = itemstock_itemid
) As stock_count
From items
Where item_id = <cfqueryparam value="#URL.item_id#">
) derived_table
where stock_count > 0

请注意,我的查询参数标记不完整。它需要一个数据类型,但你可以这样做。

于 2013-10-21T12:02:32.577 回答
2

您不能以您尝试的方式引用别名。但这仍然可以在 SQL 级别解决,而不涉及 CF。例如:

WITH Stocks AS 
( Select *,
  (
    Select IsNull(Sum(stocklevel))
    From itemstock
    Where item_id = itemstock_itemid
  ) As stock_count
  From items
  Where item_id = #URL.item_id#
)
SELECT * FROM Stocks WHERE stock_count > 0

或者,您当然可以使用 CF 的查询查询,因此如果有原始查询,您可以使用以下内容:

<cfquery dbtype="query" name="get_only_what_i_need">
select *
from get
where stock_count > 0
</cfquery>

第一个解决方案是首选,因为它将所有查询都保留在数据库级别。

于 2013-10-21T12:58:46.020 回答
-1

您需要给它一个新名称:

...
Select IsNull(Sum(stocklevel)) as SumTotal
...
And stock_count.SumTotal > 0
于 2013-10-21T11:38:17.160 回答