谁会做这样的sql题,软件面试题

来源:百度知道 编辑:UC知道 时间:2024/05/24 16:18:15
有如下表JKDL业务表
JID int primary key,//业流单号
UID int not null,//和User表是UID外键
OPTIME datetime not null,//操作时间
PAYTYPE bit ,//0代表付款,1代表收款
OPMONEY money ,//操作金额
数据例如下:
JID UID OPTIME PAYTYPE OPMONEY
2009001 001 2006-9-5 0 600.0
2009004 001 2009-4-8 0 700.0
2009005 003 2009-4-8 1 350.0
2009006 003 2006-9-5 1 460.0
2009007 001 2006-9-5 0 500.0

用户表格式如下:
UID int not null,//是JKDL表UID的主键
NAME varchar(20) not null,//用户名
数据如下:
UID NAME
001 joney
003 tom
002 tom
问查询如下格式数据,该如何写sql语句
日期 收款方式 金额
2006-9-5 付款 1100.0
2006-9-5 收款 460.0
2006-4-8 付款

SELECT OPTIME AS 日期, 收款方式=CASE PAYTYPE
WHEN 0 THEN '付款'
WHEN 1 THEN '收款' END,SUM(OPMONEY) AS 金额
FROM JKDL GROUP BY OPTIME,PAYTYPE
ORDER BY OPTIME DESC,PAYTYPE ASC

select optime as 日期, decode(paytype,1,收款,0,付款) as 收款方式,
sum(opmoney) 金额
from JKDL group by
OPTIME , PAYTYPE
order by OPTIME desc, paytype;

select OPTIME,PAYTYPE,count(OPMONEY) as totOPMONEY group by OPTIME having count(OPMONEY)>1 order by OPTIME desc, PAYTYPE asc
我不知道你的排序方式是什么?因为收款方式和金额排序区分不开,所以我给你按日期,收款方式排的序的。还有从你需要的数据中,我看不出第2表的作用。