sql 关于多列count统计的问题

lavender0371 2009-07-24 06:12:17
问题描述:
   现有一张银行交易指令表:分别有交易流水号,交易日期,交易银行类型,成功标志其他字段略
   voucher_no date bank_type voucher_stat
001 2009-04-03 icbc 0
002 2009-04-03 abc 1
003 2009-04-03 boc 1
004 2009-04-04 icbc 1
005 2009-04-04 icbc 1
006 2009-04-05 icbc 1
007 2009-04-05 abc 0
008 2009-04-05 ccb 0
009 2009-04-05 boc 0
010 2009-04-05 icbc 1
011 2009-04-05 abc 1
012 2009-04-06 icbc 1
013 2009-04-06 boc 1
014 2009-04-07 icbc 1
015 2009-04-08 icbc 1
016 2009-04-08 icbc 1
有些天企业可能只对某个银行做了银企直联支付,现在要求按天统计出每个银行每天交易的总数,成功数,失败数,
能否在一条sql语句里得出来
  银行类型 交易时间 总支付数 成功数 失败数 



...全文
840 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
moqijun 2009-07-28
  • 打赏
  • 举报
回复
4楼正确
LQS_DG2007 2009-07-28
  • 打赏
  • 举报
回复
路过,学习
chowyi 2009-07-28
  • 打赏
  • 举报
回复
最近好累 看不懂sql语句
振乾 2009-07-28
  • 打赏
  • 举报
回复
select
bank_type,COUNT(1) as 总数,date,
sum(case when voucher_stat=1 then 1 else 0 end) as 成功,
sum(case when voucher_stat=0 then 1 else 0 end) as 失败
from tb
group by bank_type,date

不错!!!
liangjianyong 2009-07-25
  • 打赏
  • 举报
回复
select a.date,a.bank_type,isnull(fail,0) 失败数,isnull(succ,0) 成功数 from
(
(select date,bank_type,count(*) fail from bank_test where stat=0
group by date,bank_type,stat) as a left join
(select date,bank_type,count(*) succ from bank_test
where stat=1 group by date,bank_type,stat) as b
on a.date=b.date and a.bank_type=b.bank_type
)
--小F-- 2009-07-24
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-07-24 18:27:27
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([voucher_no] varchar(3),[date] datetime,[bank_type] varchar(4),[voucher_stat] int)
insert [tb]
select '001','2009-04-03','icbc',0 union all
select '002','2009-04-03','abc',1 union all
select '003','2009-04-03','boc',1 union all
select '004','2009-04-04','icbc',1 union all
select '005','2009-04-04','icbc',1 union all
select '006','2009-04-05','icbc',1 union all
select '007','2009-04-05','abc',0 union all
select '008','2009-04-05','ccb',0 union all
select '009','2009-04-05','boc',0 union all
select '010','2009-04-05','icbc',1 union all
select '011','2009-04-05','abc',1 union all
select '012','2009-04-06','icbc',1 union all
select '013','2009-04-06','boc',1 union all
select '014','2009-04-07','icbc',1 union all
select '015','2009-04-08','icbc',1 union all
select '016','2009-04-08','icbc',1
--------------开始查询--------------------------

select
bank_type as 银行类型,convert(varchar(10),[date],120) as 交易时间,count(1) as 总支付数,
成功数=sum(case when voucher_stat=1 then 1 else 0 end),
失败数=sum(case when voucher_stat=0 then 1 else 0 end)
from [tb]
group by bank_type,[date]
----------------结果----------------------------
/*
(所影响的行数为 16 行)

银行类型 交易时间 总支付数 成功数 失败数
---- ---------- ----------- ----------- -----------
abc 2009-04-03 1 1 0
boc 2009-04-03 1 1 0
icbc 2009-04-03 1 0 1
icbc 2009-04-04 2 2 0
abc 2009-04-05 2 1 1
boc 2009-04-05 1 0 1
ccb 2009-04-05 1 0 1
icbc 2009-04-05 2 2 0
boc 2009-04-06 1 1 0
icbc 2009-04-06 1 1 0
icbc 2009-04-07 1 1 0
icbc 2009-04-08 2 2 0

(所影响的行数为 12 行)
*/

仙道彰 2009-07-24
  • 打赏
  • 举报
回复
select 

bank_type 银行类型,
date=convert(varchar(10),date,120) 交易时间,
总支付数=count(*),
成功数=sum(voucher_stat),
失败数=sum(1-voucher_stat)
from table1
group by convert(varchar(10),date,120),bank_type
--小F-- 2009-07-24
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-07-24 18:27:27
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([voucher_no] varchar(3),[date] datetime,[bank_type] varchar(4),[voucher_stat] int)
insert [tb]
select '001','2009-04-03','icbc',0 union all
select '002','2009-04-03','abc',1 union all
select '003','2009-04-03','boc',1 union all
select '004','2009-04-04','icbc',1 union all
select '005','2009-04-04','icbc',1 union all
select '006','2009-04-05','icbc',1 union all
select '007','2009-04-05','abc',0 union all
select '008','2009-04-05','ccb',0 union all
select '009','2009-04-05','boc',0 union all
select '010','2009-04-05','icbc',1 union all
select '011','2009-04-05','abc',1 union all
select '012','2009-04-06','icbc',1 union all
select '013','2009-04-06','boc',1 union all
select '014','2009-04-07','icbc',1 union all
select '015','2009-04-08','icbc',1 union all
select '016','2009-04-08','icbc',1
--------------开始查询--------------------------

select
bank_type as 银行类型,[date] as 交易时间,count(1) as 总支付数,
成功数=sum(case when voucher_stat=1 then 1 else 0 end),
失败数=sum(case when voucher_stat=0 then 1 else 0 end)
from [tb]
group by bank_type,[date]
----------------结果----------------------------
/*银行类型 交易时间 总支付数 成功数 失败数
---- ------------------------------------------------------ ----------- ----------- -----------
abc 2009-04-03 00:00:00.000 1 1 0
boc 2009-04-03 00:00:00.000 1 1 0
icbc 2009-04-03 00:00:00.000 1 0 1
icbc 2009-04-04 00:00:00.000 2 2 0
abc 2009-04-05 00:00:00.000 2 1 1
boc 2009-04-05 00:00:00.000 1 0 1
ccb 2009-04-05 00:00:00.000 1 0 1
icbc 2009-04-05 00:00:00.000 2 2 0
boc 2009-04-06 00:00:00.000 1 1 0
icbc 2009-04-06 00:00:00.000 1 1 0
icbc 2009-04-07 00:00:00.000 1 1 0
icbc 2009-04-08 00:00:00.000 2 2 0

(所影响的行数为 12 行)
*/

中国风 2009-07-24
  • 打赏
  • 举报
回复
select
date=convert(varchar(10),date,120),
bank_type,
總數=count(*),
[成功数]=sum(case when voucher_stat=1 then 1 else 0 end),
失敗數=sum(case when voucher_stat=0 then 1 else 0 end)
from table1
group by convert(varchar(10),date,120),bank_type

select
date=convert(varchar(10),date,120),
bank_type,
總數=count(*),
[成功数]=sum(cast(voucher_stat as int)),
失敗數=sum(1-cast(voucher_stat as int))
from table1
group by convert(varchar(10),date,120),bank_type

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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