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”分配给它
总之,我想要识别具有相同名称的替代组......
希望你理解我的问题
提前致谢
答案 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
答案 2 :(得分:-1)
你可以使用带有OVER的Row_Number()函数给你枚举,而不是使用2的整数除法提示 - 所以你在SELECT或视图中得到1和0。