2011-08-23 51 views
1

這裏是我的查詢 - 通過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

回答

1

刪除Distinct。你已經分組了,所以你不需要那個。不知道這是否能解決你的錯誤。

我也高度懷疑你不希望distinct在你的count()sum()之內。當然,您希望將所有發票總計加起來,而不僅僅是那些不同的發票總計。使用當前的語法,如果您有兩張總金額相同的發票,則會跳過一張。

編輯:如果您已經在境內傳遞從用戶,你爲什麼要選擇在查詢?在事實之後,只需將其重新添加到UI中,或執行以下操作:

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

而不是使用該字段。

+0

沒有,這不能解決問題,但謝謝! –

0

我不會因爲您發佈的代碼而發生錯誤,您確定發送的內容與您發佈的內容相符。我說因爲錯誤指的是你的查詢中沒有的'ASAP.dbo.OCRD.Territory'。

+0

是的,我相信,它肯定在T1.Territory來自OCRD表。如果我取出T1.Territory參數提示,查詢將完美運行。所以我知道這些數據是我正在尋找的數據,並且它被正確分組並且給了我正確的結果。然而,要求用戶選擇領土和數據範圍(如where子句中所述),並且在那裏我會遇到這個錯誤。 –

+0

請參閱我的答案上的編輯。 – BradC

相關問題