sql显示不同的列

时间:2014-04-14 15:53:00

标签: sql sql-server select

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

 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。 这应该是一些基本的查询,但我无法弄清楚。

3 个答案:

答案 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