这样的查询结果怎么做?在线等--

sdweihailh 2007-11-05 05:02:19
表一:
工号 日期 产品名称 工序 定额数 完成数 系数 工资
001 10.1 插头 削皮 4500 3000 0.67
001 10.1 插头 外观 3500 3000 0.85 45.6
001 10.2 日规 包装 10000 8840 0.88
001 10.2 插头 外观 3500 3000 0.85
001 10.2 日规 削皮 4500 3000 0.67 72

工资字段是按照日期分组算的,每个人每天干的工序可能多样,但是算出的工资需要在
最后一条记录显示出来.
例如:10.1 这个人干了两道工序,那么算出的工资在最后一条记录显
10.2 工号001干了三道工序,那么算出的工资还是在最后一条记录显示
系数=完成数/定额数 如果系数和(按照日期) (0.67+0.85)*20+10>30 则工资=系数和*30,否则工资=系数和*20+10
然后可以对某段时间的工资求和.
语句怎么写?
...全文
65 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yi10000 2007-11-06
  • 打赏
  • 举报
回复
不知道我说的是不是你想要的,按我说的做肯定可以实现。
yi10000 2007-11-06
  • 打赏
  • 举报
回复
你可以这样实现,
1,第一增加一个唯一关键字。
2.先算出每天记录的系数。
3,再算出每天记录的工资。
4,根据唯一关键字写入记录(就是你说的最后一条记录,如果唯一关键字是自增长,就取最大值)
5. 清除非最后条记录的工资数据
boblaw 2007-11-05
  • 打赏
  • 举报
回复

--创建测试数据表
create table Table1
(
[工号] varchar(10),
[日期] smalldatetime,
[产品名称] varchar(50),
[工序] varchar(50),
[定额数] int,
[完成数] int,
[系数] NUMERIC(10,2),
[工资] NUMERIC(10,2)
)
INSERT INTO Table1 VALUES('001','2007-10-1','插头','削皮',4500,3000,NULL,NULL)
INSERT INTO Table1 VALUES('001','2007-10-1','插头','外观',3500,3000,NULL,NULL)
INSERT INTO Table1 VALUES('001','2007-10-2','日规','包装',10000,8840,NULL,NULL)
INSERT INTO Table1 VALUES('001','2007-10-2','插头','外观',3500,3000,NULL,NULL)
INSERT INTO Table1 VALUES('001','2007-10-2','日规','削皮',4500,3000,NULL,NULL)

--开始查询
--将数据存入临时表#tmp操作,因为表一没有ID字段,如果有的话,直接在Table1表上操作更方便
SELECT IDENTITY(INT,1,1) AS Ord,Table1.* INTO #tmp FROM Table1
UPDATE #tmp SET [系数]=CAST([完成数] AS NUMERIC(10,2))/CAST([定额数] AS NUMERIC(10,2))
UPDATE #tmp SET [工资]=A.[工资] FROM
(
SELECT MAX(Ord) AS Ord,CASE WHEN SUM(系数)*20+10>30 THEN SUM(系数)*30 ELSE SUM(系数)*20+10 END AS [工资]
FROM #tmp GROUP BY [工号],DATEPART(year,[日期]),DATEPART(month,[日期]),DATEPART(day,[日期])
)A
WHERE #tmp.Ord=A.Ord
SELECT * FROM #tmp

--删除测试表
DROP TABLE #tmp
DROP TABLE TABLE1

--测试结果
--备注:在计算系数时,由于使用了四舍五入,(LZ的算法没有使用四舍五入),系数略有偏差,导致工资稍微高了一点
-- 打工的人不容易,别在工资上帮老板多剥削几毛钱,呵呵
-- 如果要不使用四舍五入,请LZ自行写更新语句,我就不提供了
/*
Ord 工号 日期 产品名称 工序 定额数 完成数 系数 工资
-------------------------------------------------------------------------------
1 001 2007-10-01 00:00:00 插头 削皮 4500 3000 .67 NULL
2 001 2007-10-01 00:00:00 插头 外观 3500 3000 .86 45.90
3 001 2007-10-02 00:00:00 日规 包装 10000 8840 .88 NULL
4 001 2007-10-02 00:00:00 插头 外观 3500 3000 .86 NULL
5 001 2007-10-02 00:00:00 日规 削皮 4500 3000 .67 72.30
*/

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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