我想在表格n4ac中找不到[stac]。[Key] + SUM([stac]。[Gross Sls Qty]的值。这就是我所拥有的:
SELECT [stac].[Key] + SUM([stac].[Gross Sls Qty])
FROM @SoldToActuals stac
LEFT JOIN @Node4Actuals n4ac
ON (([stac].[Key] + SUM([stac].[Gross Sls Qty])) = ([n4ac].[Key] + SUM([n4ac].[Gross Sls Qty])))
WHERE [stac].[Key] + SUM([stac].[Gross Sls Qty]) IS NULL
我收到此错误:
聚合不能出现在ON子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用。
有什么建议吗?
感谢。
答案 0 :(得分:0)
我的建议是在MSDN上为TSQL查找WHERE NOT IN,然后使用NOT运算符将其反转
这是一个链接:IN Operator 这是另一个链接:NOT Operator
最后一个简单的通用示例:
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');
这将选择“设计工程师”,“工具设计师”或“营销助理”的每个人,只需添加WHERE e.JobTitle NOT IN即可获得没有其中一个职称的所有人
编辑:
这是我尝试理解您的表结构并尝试从您发布的代码中编写相关示例:
SELECT [stac].[Key] + SUM([stac].[Gross Sls Qty])
FROM @SoldToActuals stac
WHERE ([stac].[Key] + SUM([stac].[Gross Sls Qty]))
NOT IN
(SELECT ([n4ac].[Key] + SUM([n4ac].[Gross Sls Qty]) FROM n4ac)
答案 1 :(得分:0)
可能尝试修改您的查询有点像
SELECT [stac].[Key] + SUM([stac].[Gross Sls Qty]) as some_col
FROM @SoldToActuals stac
LEFT JOIN @Node4Actuals n4ac
ON [stac].[Key] = [n4ac].[Key]
WHERE [n4ac].[Key] IS NULL
OR SUM([stac].[Gross Sls Qty]) > 0
答案 2 :(得分:0)
也许,您可以使用EXCEPT运算符来执行您想要的操作吗? (来自AdventureWorks的示例)
-- Create Some Sample Data --
select top 150
SalesOrderID
,LineTotal
into #BigList
from
Sales.SalesOrderDetail
order by
SalesOrderID
select top 15
SalesOrderID
,LineTotal
into #SmallList
from
Sales.SalesOrderDetail
order by
SalesOrderID
-- use except set math operater to find differences --
select
SalesOrderID
,sum(LineTotal) as SumTotal
from
#BigList
group by
SalesOrderID
except
select
SalesOrderID
,sum(LineTotal) as SumTotal
from
#SmallList
group by
SalesOrderID
答案 3 :(得分:0)
所以这是尝试重写您的查询,这可能让您看到(更容易一些)如何得到答案。
SELECT [stac].*
FROM ( SELECT [Key] + SUM([Gross Sls Qty]) AS X
FROM @SoldToActuals
) AS stac
LEFT OUTER JOIN ( SELECT [Key] + SUM([Gross Sls Qty]) AS X
FROM @Node4Actuals
) AS [n4ac] ON n4ac.X = stac.X
WHERE [stac].[Key] + SUM([stac].[Gross Sls Qty]) IS NULL
以下是使用“EXCEPT”运算符编写它的首选方法,它就像“UNION MINUS”
SELECT [Key] + SUM([Gross Sls Qty])
FROM @SoldToActuals
EXCEPT
SELECT [Key] + SUM([Gross Sls Qty])
FROM @Node4Actuals
以下是EXCEPT
的链接