2011-08-30 64 views
4

我有一張表,其中包含僱員。由於我爲公司工作的公司規模很大(超過3k名員工),這很自然,有些公司名稱相同。現在可以通過用戶名區分它們,但由於網頁需要所有這些用戶的下拉列表,因此我需要爲其名稱添加一些額外的數據。從Oracle表中獲取值計數

我知道我可以先抓住所有用戶,然後通過foreach運行它們併爲每個用戶對象添加一個計數。這將是相當無效的。因此,我需要一個很好的SQL查詢,這會做這樣的事情。子查詢可以成爲我需要的嗎?

我的表看起來是這樣的:

name ----- surname ----- username 

John  Mayer   jmaye 

Suzan  Harvey  sharv 

John  Mayer   jmay3 

現在我想將是巨大的,如果該查詢返回相同的3場,也是一個布爾值,如果有一個以上的人使用相同的名稱和姓氏組合。

回答

5

添加標誌丹尼爾的回答......

SELECT NAME, SURNAME, USERNAME, DECODE(COUNT(*) OVER (PARTITION BY NAME, SURNAME), 1, 'N', 'Y') 
FROM 
YOUR_TABLE; 

請注意,甲骨文的SQL對布爾不支持(嘆氣...)

+0

謝謝,這工作,但與解碼部分是錯誤的。它拋出了一個錯誤。這工作雖然:'DECODE(COUNT(*) OVER(分區名稱,SURNAME),1,'N','Y')' –

+0

@Janis ahh真實,抱歉,我沒有嘗試過。我已經更新了相應的查詢。 –

3

這可以通過計數來輕鬆完成了分區:

SELECT NAME, SURNAME, USERNAME, COUNT(*) OVER (PARTITION BY NAME, SURNAME) 
FROM 
YOUR_TABLE;