请教如何统计工作量

iris_tr 2014-08-13 04:11:41
数据表如下:
单号 文件名 操作人
1 AA A
2 BB A
3 AA A
4 CC B
1 DD B
2 EE B

想按照操作人统计工作量,相同单号不同文件名的只统计一次,文件名相同单号不同的也只统计一次,该怎么写啊?
...全文
324 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-08-14
  • 打赏
  • 举报
回复
引用 3 楼 iris_tr 的回复:
SELECT * FROM T1 TX WHERE TX.单号 = T1.单号 AND TX.文件名 < T1.文件名 这里是不是用<>啊?
NOT EXISTS 条件,用 <[b] 可以留下文件名最小的进行统计,用 [b]<> 单号相同都不进行统计。
Tiger_Zhao 2014-08-14
  • 打赏
  • 举报
回复
SELECT 操作人,
CASE WHEN v1<=v2
THEN v1
ELSE v2
END 工作量
FROM (
SELECT 操作人,
Count(DISTINCT 单号) v1,
Count(DISTINCT 文件名) v2
FROM T1
GROUP BY 操作人
) T

操作人        工作量
---------- -----------
A 2
B 3
iris_tr 2014-08-14
  • 打赏
  • 举报
回复
SELECT * FROM T1 TX WHERE TX.单号 = T1.单号 AND TX.文件名 < T1.文件名 这里是不是用<>啊?
iris_tr 2014-08-14
  • 打赏
  • 举报
回复
不同操作员之间之间是不需要这个规则的,因为文件和操作员是一对一的
Tiger_Zhao 2014-08-13
  • 打赏
  • 举报
回复
规则在不同操作员之间也有效吧。
IF object_id("T1") IS NOT NULL
DROP TABLE T1
GO
CREATE TABLE T1(单号 int,文件名 varchar(10),操作人 varchar(10))
GO

INSERT INTO T1
SELECT 1,'AA','A' UNION ALL
SELECT 2,'BB','A' UNION ALL
SELECT 3,'AA','A' UNION ALL
SELECT 4,'CC','B' UNION ALL
SELECT 1,'DD','B' UNION ALL
SELECT 2,'EE','B'

WITH TS (单号,文件名,操作人)
AS (
SELECT *
FROM T1
WHERE NOT EXISTS (SELECT *
FROM T1 TX
WHERE TX.单号 = T1.单号
AND TX.文件名 < T1.文件名)
AND NOT EXISTS (SELECT *
FROM T1 TX
WHERE TX.文件名 = T1.文件名
AND TX.单号 < T1.单号)
)
--SELECT * FROM TS
SELECT 操作人, COUNT(*)
FROM TS
GROUP BY 操作人

操作人        
---------- -----------
A 2
B 1

下面是TS内容
单号          文件名        操作人
----------- ---------- ----------
1 AA A
2 BB A
4 CC B


:其实数据库应该限定单号或文件名唯一,就不会有重复记录了。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧