Sql 如何将一行声明为备用行

Sql 如何将一行声明为备用行,sql,group-by,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

这是我的桌子,我想按如下所示安排这张桌子

  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        
它被排序为同一行的备用组

我正在使用SQLServer2005。备用标志以“0”开头。在我的示例中,第一条名为yatin的记录将AlternateFlag设置为“0”

现在,第二条记录与yatin同名,所以备用标志为“0”

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

简言之,我想用相同的名称识别备用组

希望你能理解我的问题


提前感谢

您可以使用带有OVER的行数函数,这将为您提供枚举,而不是使用整数除以2的提示-这样您将在SELECT或视图中得到1和0。

您可以使用聚合函数COUNT,然后拥有并合并这两个表,如:

  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
现在,这假设名称是唯一的,这意味着像Yatin这样的名称虽然有两个计数,但只与一个人关联

查看我的

尝试

 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

如何计算AlternateFlag的值?您使用的是哪台数据库服务器?在不知道备用标志的计算方式的情况下无法给出答案我想知道名称是否唯一?它会给您一个备用行,但我想将同一行作为备用组…@AijazChauhan然后按名称分组或仅获取不同的名称,给每个0和1,然后按结果将结果连接到同一个表。名称=表。名称
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