2016-06-09 25 views
0

這是我在這裏的第一個問題,所以請原諒我,如果我違反任何規則。Oracle SQL:顯示個人計數即使有重複

以下是我需要知道:

如何創建一個Oracle SQL查詢,即使是在重複的結果將顯示的一些獨特的計數?

示例:客戶表具有各種客戶進行的採購清單。該表列出了客戶ID,名稱,採購類別(即硬件,工具,季節)等。查詢結果需要顯示每個客戶ID,客戶名稱和購買類別以及個人客戶的數量。所以John Smith的顧客ID 1已經在每個部門購買。如果我對客戶進行計數,他會三次出現,因爲他已經進行了三次採購,但是我也需要一個專欄來對客戶計數一次。爲其他部門返回的其他行中的計數應該顯示0或Null。

我通常通過拉出所有內容並導出爲ex​​cel來實現此目的。我添加一個在ID上使用IF公式的列,在第一次出現客戶IE時僅顯示1:IF(A3 = A2,0,1)(如果a3與A2相同,則顯示0,if它與A2不一樣然後顯示1)。這將使我在報告的某個部分獲得唯一的客戶數量,並會告訴我客戶在報告的另一部分中購買了多少客戶。

我想直接在SQL查詢中做到這一點,因爲我需要完成一大組數據,並且在Excel中添加任何公式都會使表格變得龐大。這也將使查詢結果更容易在ACCESS中託管,以便excel可以從那裏取得結果。

我試圖找到解決這個問題的一段時間,但任何搜索谷歌通常會返回結果如何從表中刪除重複項或如何計算表中的重複項。

如果這是一個長期的問題,我很抱歉,但我想通過,所以我不會浪費任何人的時間回到第四個評論(我已經在這裏看過很多次,而且當OP要求非常神祕的時候問題,並希望每個人都能理解而不會進一步補償)。

+0

您的問題添加一些示例數據和預期的輸出。 _格式化文本,請[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-問題/ 285557#285557) –

回答

2

使用distinct可以用於計數以僅計算字段的唯一值。

SELECT 
cust.customer_id, cust.customer_name, p.category, 
count(distinct p.department_id) as total_departments, 
count(*) as total_purchases 
FROM customers cust 
LEFT JOIN purchase_table p on (cust.customer_id = p.customer_id) 
GROUP BY cust.customer_id, cust.customer_name, p.category 
ORDER BY cust.customer_id; 

這樣的方法不限於Oracle RDBMS。

+0

感謝您的回答盧克風暴。我嘗試在當前查詢中放置count(distinct c.customer_id),並且每個客戶實例仍顯示1。 – karlman84

+0

如果您在customer_id上進行分組並且在customer_id上進行分組,則預期爲1 – LukStorms

+0

已更改查詢。接近你在找什麼? – LukStorms