表如下所示:
表 tb
pid 客户名称 客户金额 时间 延期
001 A 14145 2007-1-2 是
002 B 885 2007-2-9 是
003 A 1254 2007-2-7 否
109 C 6352 2007-1-3 是
200 A 1245 2007-1-7 否
…………………………………………………………
pid是主键,每一行代表一个合同。需要的结果是统计在2007年内每个客户有多少个合同,延期的合同占其合同总数的百分比。
结果如下:
客户名称 延期合同数 合同数 延期比例
A 1 3 33.3%
B 0 1 0
C 1 1 100%对于达人来说也是小case,让我学习下,给20分聊表心意。
表 tb
pid 客户名称 客户金额 时间 延期
001 A 14145 2007-1-2 是
002 B 885 2007-2-9 是
003 A 1254 2007-2-7 否
109 C 6352 2007-1-3 是
200 A 1245 2007-1-7 否
…………………………………………………………
pid是主键,每一行代表一个合同。需要的结果是统计在2007年内每个客户有多少个合同,延期的合同占其合同总数的百分比。
结果如下:
客户名称 延期合同数 合同数 延期比例
A 1 3 33.3%
B 0 1 0
C 1 1 100%对于达人来说也是小case,让我学习下,给20分聊表心意。
延期合同数 = (select count(*) from tb where 客户名称 = t.客户名称 and 延期 = '是') ,
合同数 = count(*),
延期比例 = (select count(*) from tb where 客户名称 = t.客户名称 and 延期 = '是')*100.0 / count(*)
from tb
group by 客户名称
insert into tb select '001', 'A' , 14145, '2007-1-2' , '是'
insert into tb select '002' , 'B' , 885 , '2007-2-9' , '是'
insert into tb select '003' , 'A' , 1254 , '2007-2-7' , '否'
insert into tb select '109' , 'C' , 6352 , '2007-1-3' , '是'
insert into tb select '200' , 'A', 1245 , '2007-1-7', '否' select 客户名称
,sum(case when 延期='是' then 1 else 0 end) [延期合同数]
,count(*) 合同数
,rtrim(sum(case when 延期='是' then 1 else 0 end)*100/count(*))+'%' [延期比例]
from tb
group by 客户名称drop table tb/*
客户名称 延期合同数 合同数 延期比例
---- ----------- ----------- -------------
A 1 3 33%
B 1 1 100%
C 1 1 100%(所影响的行数为 3 行)
*/
insert into tb values('001', 'A', 14145, '2007-1-2', '是')
insert into tb values('002', 'B', 885 , '2007-2-9', '是')
insert into tb values('003', 'A', 1254 , '2007-2-7', '否')
insert into tb values('109', 'C', 6352 , '2007-1-3', '是')
insert into tb values('200', 'A', 1245 , '2007-1-7', '否')
goselect 客户名称 ,
延期合同数 = (select count(*) from tb where 客户名称 = t.客户名称 and 延期 = '是') ,
合同数 = count(*),
延期比例 = (select count(*) from tb where 客户名称 = t.客户名称 and 延期 = '是')*100.0 / count(*)
from tb t
group by 客户名称drop table tb/*
客户名称 延期合同数 合同数 延期比例
---------- ----------- ----------- ----------------------------
A 1 3 33.333333333333
B 1 1 100.000000000000
C 1 1 100.000000000000(所影响的行数为 3 行)
*/
insert into tb values('001', 'A', 14145, '2007-1-2', '是')
insert into tb values('002', 'B', 885 , '2007-2-9', '是')
insert into tb values('003', 'A', 1254 , '2007-2-7', '否')
insert into tb values('109', 'C', 6352 , '2007-1-3', '是')
insert into tb values('200', 'A', 1245 , '2007-1-7', '否')
goselect 客户名称 ,
延期合同数 = (select count(*) from tb where 客户名称 = t.客户名称 and 延期 = '是') ,
合同数 = count(*),
延期比例 = cast(cast((select count(*) from tb where 客户名称 = t.客户名称 and 延期 = '是')*100.0 / count(*) as decimal(18,2)) as varchar) + '%'
from tb t
group by 客户名称drop table tb/*
客户名称 延期合同数 合同数 延期比例
---------- ----------- ----------- -------------------------------
A 1 3 33.33%
B 1 1 100.00%
C 1 1 100.00%(所影响的行数为 3 行)
*/
SELECT 客户名称 ,
CAST( WHEN 延期 = '是' THEN COUNT(pid) END ,
COUNT(pid) ,
CAST( WHEN 延期 = '是' THEN COUNT(pid) END/COUNT(pid)
WHERE CONVERT(CHAR4) , 时间 ,120) = '2007'
GROUP BY 客户名称