统计成绩疑难问题

czyoooo 2015-05-20 10:44:58
Tid workid kind creattime price
1001 201 销售 2015-04-01 200
1002 201 销售 2015-04-02 100
5001 201 销售 2015-05-20 500
1001 702 调整 2015-05-20 -100

要求统计工号201报表 2015-05-20日结果为

5001 201 销售 2015-05-20 500
1001 702 调整 2015-05-20 -100


Tid= 1001第一次出现是201操作的,201是第一责任人,
所以 2015-05-20也要出现在201的报表里面
...全文
326 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-06-23
  • 打赏
  • 举报
回复
WITH
/* 测试数据
table1(Tid,workid,kind,creattime,price) AS (
SELECT 1001,201,'销售','2015-04-01',200 UNION ALL
SELECT 1002,201,'销售','2015-04-02',100 UNION ALL
SELECT 5001,201,'销售','2015-05-20',500 UNION ALL
SELECT 1001,702,'调整','2015-05-20',-100
), */
t1 AS (
SELECT a.*,
b.workid firstworkid
FROM table1 a
CROSS APPLY (
SELECT TOP 1 workid
FROM table1
WHERE table1.Tid <= a.Tid
ORDER BY creattime
) b
WHERE a.creattime = '2015-05-20'
)
SELECT Tid,workid,kind,creattime,price
FROM t1
WHERE firstworkid = 201


Tid workid kind creattime price
----------- ----------- ---- ---------- -----------
5001 201 销售 2015-05-20 500
1001 702 调整 2015-05-20 -100
一头大葱 2015-06-20
  • 打赏
  • 举报
回复
有序的运算用SQL搞起来比较绕,其实这个问题本身的逻辑并不复杂,如果是JAVA环境可以用免费的集算器来处理,代码要更直观: A1 $select * from tb order by creattime A2 =A1.select(creattime==date("2015-05-20") && (workid==201 || (t=Tid,A1.select@1(Tid==t).workid==201))) A1:执行SQL取数,按creattime排序 A2:选出creattime为2015-05-20且workid为201;或者日期为2015-05-20且相同Tid下第一条记录workid为201的记录。 这里http://blog.raqsoft.cn/?p=5186 还有些别的序运算例子。
还在加载中灬 2015-05-21
  • 打赏
  • 举报
回复
--SQL2005可以这样
;WITH CTE AS(
	SELECT T1.*,T2.workid workid2
		,ROW_NUMBER()OVER(PARTITION BY T1.Tid ORDER BY T2.creattime)RN
	FROM TB T1
		JOIN TB T2 ON T1.Tid=T2.Tid
	WHERE T1.creattime='2015-05-20'
)
SELECT Tid,workid,kind,creattime,price
FROM CTE
WHERE workid2='201' AND RN=1
还在加载中灬 2015-05-21
  • 打赏
  • 举报
回复
DECLARE @workid INT,@creattime DATETIME
SET @workid='201'
SET @creattime='2015-05-20'
SELECT * FROM TB T1
WHERE creattime=@creattime
	AND EXISTS(SELECT 1 FROM TB T2 WHERE T2.workid=@workid AND T1.Tid=T2.Tid
	AND NOT EXISTS(SELECT 1 FROM TB T3 WHERE T2.Tid=T3.Tid AND T2.creattime>T3.creattime))
RINK_1 2015-05-20
  • 打赏
  • 举报
回复
SELECT A1.* FROM TABLE_a A1 JOIN ( SELECT * FROM TABLE_a A2 WHERE NOT EXISTS (SELECT 1 FROM TABLE_a WHERE Tid=A2.Tid AND creattime<A2.creattime) ) AS A3 ON A1.Tid=A3.Tid WHERE A3.workid='201' AND A1.creattime='2015-05-20' UNION ALL SELECT A4.* FROM TABLE_a A4 WHERE A4.workid='201' AND A4.creattime='2015-05-20'
概 述 二十二世纪,高科技技术占主导地位的世纪,各行各业都以高科技技术为先,以先进的管理技术来代替传统的管理方式,企业家对实现办公自动化管理的认识的也在逐步升级。以具有国际先进管理思想的教育待业软件为蓝本,针对教育系统,开发一套《学生成绩统计管理软件》。采取先进的一体化技术,提供用户自定义数据接口,与微软Microsoft Excel全面兼容,是一个全面支持Windows95/Windows98,Windows2000,WindowsNT等操作系统的跨平台管理软件。其采用最前沿的软件开发,控制核心技术,并结合最新的编程工具DELPHI6.0,整套程序界面清晰整洁、美观大方、通俗易懂,不论使用者是否有计算机基础,都可以按提示轻松完成操作过程。《学生成绩统计管理软件》为你提供自动绘总、自动统计总分、自动排名、自动计算各科平均分、自动统计各科的成绩壮况等功能。 同时,我公司将以一流的管理、一流的技术、一流的软件开发专业技术人员为您提供全方位的技术咨询及优质售后服务,随时解答您各种疑难问题,我们将以您的需求为主,更好的为您服务。 系统运行球境: ●硬件配置:586以上CPU,内存32M以上,硬盘空间500M以上。 ●操作系统 中文Windows95/Windows98,Windows2000,WindowsNT或更高版本。 宜春三面向科技发展有限公司 版权所有 联系电话:0795-3212079 0795-3212076 联系人:王跃年 朱小军 程序设计:朱小军 本人的个人主页:www.delphi6.onchina.net          

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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