如何将行声明为备用行

时间:2013-11-09 09:15:30

标签: sql group-by

  id    Name    claim   priority 
   1    yatin   70      5         
   6    yatin   1       10        
   2    hiren   30      3         
   3    pankaj  40      2         
   4    kavin   50      1         
   5    jigo    10      4           
   7    jigo    1       10        

这是我的表格,我想安排下表,如下所示

  id    Name    claim   priority AlternateFlag
   1    yatin   70      5         0
   6    yatin   1       10        0
   2    hiren   30      3         1
   3    pankaj  40      2         0
   4    kavin   50      1         1
   5    jigo    10      4         0    
   7    jigo    1       10        0

它被排序为同一行的备用组。

我正在使用sql server 2005. Alternate flag以'0'开头。在我的示例中,名为“yatin”的第一条记录因此将AlternateFlag设置为“0”。

现在第二条记录与“yatin”同名,因此备用标记为“0”

现在名为“hiren”的第三条记录是单条记录,因此将“1”分配给它

总之,我想要识别具有相同名称的替代组......

希望你理解我的问题

提前致谢

3 个答案:

答案 0 :(得分:0)

您可以使用聚合函数COUNT(),然后使用HAVING(),然后使用UNION这两个表,例如:

 SELECT id, A.Name, Claim, Priority, 0 as AlternateFlag
 FROM YourTable 
 INNER JOIN (
 SELECT Name, COUNT(*) as NameCount 
 FROM YourTable
 GROUP BY Name
 HAVING COUNT(*) > 1 ) A
 ON YourTable.Name = A.Name
 UNION ALL
 SELECT id, B.Name, Claim, Priority, 1 as AlternateFlag
 FROM YourTable 
 INNER JOIN (
 SELECT Name, COUNT(*) as NameCount 
 FROM YourTable
 GROUP BY Name
 HAVING COUNT(*) = 1 ) B
 ON YourTable.Name = B.Name

现在,假设名称是唯一的,这意味着像Yatin这样的名称,例如虽然有两个计数只与一个人相关联。

查看我的SqlFiddle Demo

答案 1 :(得分:0)

尝试

SELECT t.*, f.AlternateFlag
FROM tbl t
JOIN (
    SELECT [name], 
        AlternateFlag = ~CAST(ROW_NUMBER() OVER(ORDER BY MIN(ID)) % 2 AS BIT)
    FROM tbl
    GROUP BY name
) f ON f.name = t.name

demo

答案 2 :(得分:-1)

你可以使用带有OVER的Row_Number()函数给你枚举,而不是使用2的整数除法提示 - 所以你在SELECT或视图中得到1和0。