我目前正在开发一个查询,它会查询查询中的所有相关数据和库存水平,而不是单独循环查看库存水平。到目前为止,我已经设法通过这样做获得了这些库存水平:
<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
然而,这只是抛出一个错误并说它不是一个有效的字段(这是有道理的)我想知道,我如何参考该总和?
答案 0 :(得分:2)
你不能引用'get。'在查询中。我想如果你只是参考stock_count你会没事的吗?
答案 1 :(得分: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
请注意,我的查询参数标记不完整。它需要一种数据类型,但你可以这样做。
答案 2 :(得分:2)
您无法以您尝试的方式引用别名。但这仍然可以在SQL级别解决,而不涉及CF. E.g:
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>
首选解决方案是首选,因为它将所有查询保持在数据库级别。
答案 3 :(得分:-1)
你需要给它一个新名字:
...
Select IsNull(Sum(stocklevel)) as SumTotal
...
And stock_count.SumTotal > 0