SQL错误选择列表中无效,因为它不是在聚合函数或GROUP包含BY子句

SQL错误选择列表中无效,因为它不是在聚合函数或GROUP包含BY子句

问题描述:

这里是我的查询 - 通过SAP查询工具创建:SQL错误选择列表中无效,因为它不是在聚合函数或GROUP包含BY子句

SELECT DISTINCT 
    T1.CardCode, 
    T1.CardName, 
    T1.Phone1, 
    T1.GroupCode, 
    T1.Territory, 
    T2.Street, 
    T2.Block, 
    T2.City, 
    T2.ZipCode, 
    T2.County, 
    T2.State, 
    T2.Country, 
    count(distinct(T3.DocEntry)) as NumberOfInvoices, 
    sum(distinct(T4.GTotal)) as InvoiceTotal 
FROM 
    [ASAP].[dbo].[OCRD] as T1 
    INNER JOIN [ASAP].[dbo].[CRD1] as T2 ON T1.CardCode = T2.CardCode 
    INNER JOIN [ASAP].[dbo].[OINV] as T3 on T1.CardCode = T3.CardCode 
    INNER JOIN [ASAP].[dbo].[INV1] as T4 on T3.DocEntry = T4.DocEntry 
WHERE 
    T1.Territory = [%0] 
    AND T3.DocDate >= [%1] 
    AND T3.DocDate <= [%2] 
GROUP BY 
    T1.CardCode, 
    T1.CardName, 
    T1.Phone1, 
    T1.GroupCode, 
    T1.Territory, 
    T2.Street, 
    T2.Block, 
    T2.City, 
    T2.ZipCode, 
    T2.County, 
    T2.State, 
    T2.Country 

这是我收到的错误 - 你可以清楚地看到我在GROUP BY领域:

  • [微软] [SQL本机客户端] [SQL服务器]列 “ASAP.dbo.OCRD.Territory”是在选择列表中,因为它无效是 不包含在聚合函数或GROUP BY子句中。
  • [微软] [SQL本机客户端] [SQL服务器]声明“SERV

请告知

+1

你发布的sql很好。这个错误可能来自大事务中的其他事务,这是(?)的一部分。如果您突出显示您的交易的这一部分并运行它,您是否仍然遇到错误? – Chains

删除Distinct。你已经分组了,所以你不需要那个。不知道这是否能解决你的错误。

我也高度怀疑你不希望distinct在你的count()sum()之内。当然,您希望将所有发票总计加起来,而不仅仅是那些不同的发票总计。使用当前的语法,如果您有两张总金额相同的发票,则会跳过一张。

编辑:如果您已经在境内传递从用户,你为什么要选择在查询?在事实之后,只需将其重新添加到UI中,或执行以下操作:

SELECT ..., [%0] AS Territory, ... 

而不是使用该字段。

+0

没有,这不能解决问题,但谢谢! –

我不会因为您发布的代码而发生错误,您确定发送的内容与您发布的内容相符。我说因为错误指的是你的查询中没有的'ASAP.dbo.OCRD.Territory'。

+0

是的,我相信,它肯定在T1.Territory来自OCRD表。如果我取出T1.Territory参数提示,查询将完美运行。所以我知道这些数据是我正在寻找的数据,并且它被正确分组并且给了我正确的结果。然而,要求用户选择领土和数据范围(如where子句中所述),并且在那里我会遇到这个错误。 –

+0

请参阅我的答案上的编辑。 – BradC