2013-10-09 46 views
0

假設一個名爲交易表有兩列:invoiceNumberitemNumber。表中的多個記錄反映了單個發票上的多個項目的數量。 (我知道這是不是一個合適的設計,但我簡化了更復雜的結構來獲得在根的問題。)SQL Server的查詢來進一步總結分組數據

我能確定的唯一項目的平均數量與像查詢每一張發票:

SELECT invoiceNumber, COUNT(DISTINCT itemNumber) 
FROM transactions 
GROUP BY invoiceNumber 

此查詢有效地忽略了一個項目的數量,每個發票只計算一次,並顯示每個發票的結果。

而是這一切的詳細信息,但是,我真正想要的是確定跨所有發票平均一些獨特的項目。也就是說,我只想總結每張發票的信息。我怎麼做?

+0

爲什麼使用'平均數'?也許你想說'唯一號碼'? –

回答

1

您可以彙總已經知道如何獲得的結果。

WITH DistinctCounts AS (
    SELECT invoiceNumber, COUNT(DISTINCT itemNumber) AS distinctItems 
    FROM transactions 
    GROUP BY invoiceNumber 
) 
    SELECT AVG(distinctItems) 
    FROM DistinctCounts 
+0

工作正常,但我不得不在查詢的開頭添加分號以避免語法錯誤 – jalperin

+1

謝謝。準確地說,您必須添加的分號是前一個查詢的終結符,而不是此查詢的一部分。如果你單獨運行這個查詢,沒有分號就沒問題。 :) –

+0

我正在通過一個3D聚會網絡應用程序的界面運行查詢,並且顯然我運行的不止一個查詢,因此弄清楚這一點令人費解。 ;-)順便說一句,我在這裏找到了一個非常類似的答案:http://technet.microsoft.com/en-us/library/ms175972.aspx「B.使用公用表表達式來限制計數和報告平均值」 – jalperin

0
Select avg(numberininvoice) 
From 
(
Select invoicenumber, count(itemnumber) as numberininvoie 
From 
(Select distinct invoicenumber, itemnumber 
From transactions) a 
Group by invoicenumber 
) b