当我尝试运行此查询时,我一直在寻求SQL Server错误提示的帮助。
该查询仅用于按2个条件(数量和收入)将产品分为4组。为了获得收益,我需要ndk {
abiFilters "armeabi-v7a", "x86"
}
函数,这会导致我在SUM
中遇到问题(如果我很了解错误的话)。
我该如何解决这个问题?
GROUP BY
答案 0 :(得分:1)
您已证实我的怀疑。我会回应-没有必要纠正在逻辑上有缺陷的查询。您需要在分类之前进行汇总。您最初的方法是尝试同时做。因此,重新开始。通常,将问题分解成可以完成的部分比较容易-从基本的选择行开始,然后逐步修改代码以构建实现目标的逻辑。这适用于任何语言。
因此,这是我对一个简短的解决方案的看法。由于您未提供架构或数据,因此我使用了AdventureWorks。将来,当您提供架构和数据或使用标准示例数据库时,很有可能会提供帮助并且非常有用。
with cte as (
select det.ProductID, sum(det.OrderQty * det.UnitPrice) as totalvalue
from Sales.SalesOrderDetail As det
where exists (
select * from Sales.SalesOrderHeader as ord
where det.SalesOrderID = ord.SalesOrderID
and ord.OrderDate >= '20130101' and ord.OrderDate < '20140101'
)
group by det.ProductID
)
select cte.ProductID, cte.totalvalue,
case when totalvalue >= 75000 then 'Great Product'
else 'meh - needs work' end
as [Group]
from cte
order by [Group], cte.ProductID
;
请注意cte中的where子句。将函数用作过滤器时,最好避免将函数应用于列,因为函数将阻止使用任何有用的索引。还要注意,我忽略了您的大部分逻辑。这演示了该技术;您将需要根据实际需要对其进行扩展。