我有一个这样的表,需要添加只显示不同行信息的列:
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
结果列基本上仅为不同的Name值选择1。 这应该是一些基本的查询,但我无法弄清楚。
答案 0 :(得分: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
值。
答案 1 :(得分: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
答案 2 :(得分: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