0
  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。备用标志以“0”开头。在我的示例中,第一个记录名称为“yatin”,因此将 AlternateFlag 设置为“0”。

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

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

简而言之,我想确定具有相同名称的备用组...

希望你能理解我的问题

提前致谢

4

3 回答 3

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 演示

于 2013-11-09T09:44:30.797 回答
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

演示

于 2013-11-09T09:47:23.550 回答
-1

您可以将 Row_Number() 函数与 OVER 一起使用,该函数将为您提供枚举,而不是使用整数除以 2 的提醒 - 因此您将在 SELECT 或视图中获得 1 和 0。

于 2013-11-09T09:27:00.520 回答