在我们的应用程序中,我们有一些存储人员数据的表。我需要找出同一个办公室是否多次分配给一名工作人员。我怎样才能在SQL Server中解决这个问题?
我尝试了以下查询,但它没有给我正确的解决方案。
SELECT DISTINCT STAFFID, officeid
FROM [stafftable]
WHERE rowstatus = 'A'
GROUP BY STAFFID, officeid
HAVING COUNT(staffid) > 1
AND COUNT(officeid) > 1
ORDER BY STAFFID, officeid
它还返回分配给不同办公室的工作人员。任何帮助将不胜感激。
答案 0 :(得分:2)
您可以使用COUNT(*)
来计算每个组中的所有行:
SELECT STAFFID, officeid
FROM [stafftable]
WHERE rowstatus = 'A'
GROUP BY STAFFID, officeid
HAVING COUNT(*) > 1
ORDER BY STAFFID, officeid
答案 1 :(得分:1)
SELECT *
FROM (
SELECT *, RowNum = ROW_NUMBER() OVER (PARTITION BY STAFFID, officeid ORDER BY STAFFID)
FROM dbo.stafftable
WHERE rowstatus = 'A'
) t
WHERE t.RowNum > 1
答案 2 :(得分:1)
;With cte
as (
select * row_number() over(partition by STAFFID, officeid )as count from stafftable
where rowstatus = 'A'
)
select * from cte where count > 1