2011-08-30 65 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;