2014-04-14 82 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