【跪求】SQL中存储过程筛选数据库表中某列中某个值的个数怎么写?

anniking 2015-11-02 04:31:43
有一个表中计算检验员某一步所得分数,在开始阶段先要筛选出检验员如(检08)在检验这一步中的共有多少个,9月--10月有若干个记录,
检验这步的计算方法为:检验的交验数之和(单人+二人的一半之和)
(1)如果检08在检验这步为单个,那就直接算交验数
(2) 如果检08、09在检验这步这种组合,交验数就要除以2
(3)如果检08、09、10在检验这步种组合,交验数除以3

输入这步的计算方法为:计算个数(二人组合需除以2,三人需除3)

入库这步的计算方法为:计数(同上)

受入这步的计算方法为:计数(同上)

(实现结果:检验员各步的值乘以系数即为得分。)

怎样用SQL语句搜出表中所需要的值?
select sum(交验数:必须除过筛选个数后求和),count(输入),count(入库),count(受入),count(包装) from 表 where data between ‘2015-09-21’ and ‘2015-10-20’

交验数:必须除过筛选个数后求和

输入、入库、受入、包装:交验数个数

包装这步的计算方法为:计数(同上)

求各位大仙帮忙!!!

...全文
322 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-11-11
  • 打赏
  • 举报
回复
校验记录(物品ID,工序ID,校验ID)
WITH a AS (-- 单个校验员101的校验明细
SELECT *
FROM 校验记录
WHERE 校验ID = 101
)
,b AS (-- 每物品每工序的校验人数
SELECT 物品ID,
工序ID,
COUNT(*) 人数
FROM 校验记录
GROUP BY 物品ID,工序ID
)
,c AS (
SELECT a.物品ID,
a.工序ID,
1.0/b.人数 分数
FROM a
JOIN b
ON a.物品ID = b.物品ID
AND a.工序ID = b.工序ID
)
SELECT 物品ID,
ISNULL([1],0) AS 输入,
ISNULL([2],0) AS 入库,
ISNULL([3],0) AS 受入,
ISNULL([4],0) AS 包装
FROM c
PIVOT (SUM(分数)
FOR 工序ID IN ([1],[2],[3],[4])
) p

anniking 2015-11-11
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
数据连第一范式的原子性都不满足,必须拆分成主(校验对象)从(校验员)表。
输入、受入、入库、包装这些列项的值都有2-3个。字段可以再分 绕晕了都。。。。。 能帮我简单的开一下表吗?
anniking 2015-11-11
  • 打赏
  • 举报
回复
加一个检验员的表(检验员代码,检验员名字)就可以了吗?这样用leftjoin关联,这样可以吧?
Tiger_Zhao 2015-11-04
  • 打赏
  • 举报
回复
重新设计表,程序要按主从表结构写入数据库。
anniking 2015-11-04
  • 打赏
  • 举报
回复
具体怎么操作,for example。。。。
Tiger_Zhao 2015-11-02
  • 打赏
  • 举报
回复
数据连第一范式的原子性都不满足,必须拆分成主(校验对象)从(校验员)表。

22,210

社区成员

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

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