0

我可以显示存在多少重复分数,但我无法显示在哪个部门。

select distinct *
  , ROW_NUMBER() over (partition by f.depname order by f.stgrade) as ranked
from (
  SELECT COUNT(*) as repeatetive, DepName, stgrade
  FROM TBL_DEPARTMANTS
  CROSS JOIN TBL_GRADES
  group by stgrade, DepName
  having count(*) > 1
) as f
4

3 回答 3

1
  • 不要使用CROSS JOINwhich 产生多行来返回。
  • 不需要子查询,直接在主查询中使用窗口解析功能。
  • 删除表达式中partition by f.depname的部分。row_number() over (..)

因此,以下查询非常适合您的需要:

select DepName, stgrade,
       row_number() over (order by g.stgrade,d.DepName) as ranked
  from TBL_DEPARTMANTS d
  left join TBL_GRADES g
    on g.DeptId = d.Id
 group by stgrade, DepName
having count(*) > 1;

假设TBL_GRADES表有一个名为的列DeptId否则您需要使用JOIN语句将另一个表添加到此查询中)

Demo

于 2019-07-24T07:02:26.323 回答
0

您的子查询返回部门和等级明智计数至少存在 2 行。现在,当您在不同列表中添加 COUNT 时,您可以从 Sub Query 输出中仅获取 Department 和 Grade 的不同值,考虑到 COUNT 的差异,这将带来一些重复数据。如果您想获得部门和年级的不同列表,可以尝试以下脚本-

SELECT DISTINCT
       DepName, 
       stgrade
FROM TBL_DEPARTMANTS
     CROSS JOIN TBL_GRADES
GROUP BY DepName,stgrade             
HAVING COUNT(*) > 1
于 2019-07-24T06:28:51.017 回答
0

这可能会有所帮助....

DECLARE @Table TABLE(Id INT IDENTITY(1,1), Department NVARCHAR(10), Score INT)
INSERT INTO @Table VALUES 
('A', 10),
('A', 10),
('A', 20),
('A', 40),
('B', 10),
('B', 20),
('B', 20),
('C', 20)

;WITH DupLicateData
AS
(
  SELECT Id, Department,Score, COUNT(1) OVER(PARTITION BY Department,Score ORDER BY Department,Score ASC) Rnk
  FROM @Table
)
SELECT Id, Department,Score
FROM DupLicateData
WHERE Rnk > 1
于 2019-07-24T06:31:17.847 回答