2014-04-14 64 views
-2

我有一个这样的表,需要添加列,将只在不同的行显示信息:SQL显示不同的列

ID Name 
1  1001 
2  1001 
3  1001 
4  1001 
5  1002 
6  1002 
7  1002 
8  1003 
9  1004 
10  1004 

我需要这样的结果:

ID Name Result 
1  1001 1 
2  1001 NULL 
3  1001 NULL 
4  1001 NULL 
5  1002 1 
6  1002 NULL 
7  1002 NULL 
8  1003 1 
9  1004 1 
10  1004 NULL 

结果列基本仅为不同的名称值选择1。 这应该是一些基本的查询,但我无法想象它。

+0

是否“1”,必须要对第一个实例不同的价值? – sarin

+3

从技术上讲,这些都是唯一的行,因为它们具有不同的ID值。其次,为什么你想要所有的ID,但只有第一个有1值? – Zane

+0

其实不管它是第一个会被标记的还是同一个**的任何其他行**名称**。此查询将用于构建表,我将在多维立方体构建中使用该表,其中我需要所有ID –

回答

1

由于订购会对您的概念造成严重破坏,因此我会假设您将始终按ID排序。

你可以做这样的事情:

select ID, Name, 
    case (select count(*) from table t2 where t2.Name=t1.Name and t1.ID > t2.ID) 
    when 0 then 1 
    else null 
    end as Result 
from table t1 

这将计算所有具有相同名称的行,并且比处理的行较低的ID。如果没有这样的行,那么它是一个新名称,所以它会得到1,否则,它会得到一个null值。

0

试一下

SELECT ID, 
     NAME, 
     Case When x.minId Is Not Null Then 1 Else Null End As Result 
FROM Table 
left JOIN (
    SELECT Name, min(id) minId 
    FROM Table) x 
    on x.minId = Table.Id 
    and x.Name = Table.Name 
1

您可以使用row_number获得一组的第一个实例,在这种情况下Name

select ID, Name, 
    case row_number() over(partition by Name order by ID) 
     when 1 then 1 end Result 
from YourTable