有表如下:(表名为A)
客户编码 客户名称 购买数量 交易总额 发生日期
0001 张三 10 1200 2009.3.2
0002 20 2400 2009.3.5
0001 张三 15 1800 2009.4.1
0003 2 240 2009.4.2
0004 李四 5 600 2009.4.3
……我想使用聚合函数得到每个客户购买的次数和总金额,且客户名称为空时显示未登记,语句如下:
select 客户编码,iif(isnull(客户名称),'未登记',客户名称) as 客户名称,count(客户编码) as 发生次数,sum(交易总额) as 交易合计 from A group by 客户编码,客户名称预想得到结果:
0001 张三 2 3000
0002 未登记 1 2400
0003 未登记 1 240
0004 李四 1 600结果却不对,问题出现在客户名称是空值的字段上!请各位高手指点个解决办法,谢谢先!
客户编码 客户名称 购买数量 交易总额 发生日期
0001 张三 10 1200 2009.3.2
0002 20 2400 2009.3.5
0001 张三 15 1800 2009.4.1
0003 2 240 2009.4.2
0004 李四 5 600 2009.4.3
……我想使用聚合函数得到每个客户购买的次数和总金额,且客户名称为空时显示未登记,语句如下:
select 客户编码,iif(isnull(客户名称),'未登记',客户名称) as 客户名称,count(客户编码) as 发生次数,sum(交易总额) as 交易合计 from A group by 客户编码,客户名称预想得到结果:
0001 张三 2 3000
0002 未登记 1 2400
0003 未登记 1 240
0004 李四 1 600结果却不对,问题出现在客户名称是空值的字段上!请各位高手指点个解决办法,谢谢先!
解决方案 »
- 请教一条sql语句
- 问一个SQL语句,大家帮帮我~
- 删除索引的时候出现‘系统目录不存在’
- 关于sql 2000安装的问题。
- 搞不懂这个是怎么回事!
- win7下mysql-connector-odbc-3.51.12-win32 安装后找不到安装目录 怎么解决
- SQLSERVER pro
- 急救:我用 EXEC master..xp_cmdshell '路径\*.exe' 执行后,无法终止被执行的程序。怎么办?
- 有關 OpenRowSet 的問題:(為何能 Select 但不能 Update ?)
- 各位大哥,关于决策支持的问题,请救救小弟。。
- 如何同时删除2个表中的记录
- 关于SQL MOBILE部署的问题
WHERE 客户编码 IS NOT NULL
from A group by 客户编码,客户名称
union all
select 客户编码,客户名称='未登记',count(1) 购买次数,sum(交易总额) 交易总额 from a where 客户名称 = '' group by 客户编码
order by 客户编码
if object_id('[TB]') is not null drop table [TB]
create table [TB]([客户编码] varchar(4),[客户名称] varchar(4),[购买数量] int,[交易总额] int,[发生日期] datetime)
insert [TB]
select '0001','张三',10,1200,'2009.3.2' union all
select '0002',null,20,2400,'2009.3.5' union all
select '0001','张三',15,1800,'2009.4.1' union all
select '0003',null,2,240,'2009.4.2' union all
select '0004','李四',5,600,'2009.4.3'
select [客户编码],[客户名称]=isnull([客户名称],'未登记'),数量=count(1),[购买数量]=sum([购买数量])
from TB group by [客户编码],[客户名称]
order by [客户编码]/*
客户编码 客户名称 数量 购买数量
---- ---- ----------- -----------
0001 张三 2 25
0002 未登 1 20
0003 未登 1 2
0004 李四 1 5(4 行受影响)
*/
drop table TB
declare @tb table(客户编码 varchar(10),客户名称 varchar(10),购买数量 int, 交易总额 int,发生日期 varchar(10))
insert @tb select
'0001', '张三', 10 , 1200 , '2009.3.2 'union all select
'0002', null , 20 , 2400 , ' 2009.3.5 'union all select
'0001', '张三', 15 , 1800 , '2009.4.1 'union all select
'0003', null , 2 , 240 , ' 2009.4.2 'union all select
'0004', '李四', 5 , 600 , ' 2009.4.3 'select 客户编码,isnull(客户名称,'未登记')客户名称,count(*) 发生次数, sum(交易总额)交易总额
from @tb
group by 客户编码,客户名称
order by 客户编码客户编码 客户名称 发生次数 交易总额
---------- ---------- ----------- -----------
0001 张三 2 3000
0002 未登记 1 2400
0003 未登记 1 240
0004 李四 1 600(4 行受影响)
create table a (客户编码 varchar(20),客户名称 varchar(20),购买数量 int,交易总额 int,发生日期 datetime)
insert a
select '0001','张三',10,1200,'2009-3-2' union all
select '0002',null, 20,2400,'2009-3-5' union all
select '0001','张三',15,1800,'2009-4-1' union all
select '0003',null,2,240,'2009-4-2' union all
select '0004','李四',5,600,'2009-4-3'
go-- drop table aselect
客户编码,isnull(客户名称,'未登记'),count(购买数量),sum(交易总额)
from a
group by 客户编码,客户名称 order by 客户编码
客户编码
-------------------- -------------------- ----------- -----------
0001 张三 2 3000
0002 未登记 1 2400
0003 未登记 1 240
0004 李四 1 600(所影响的行数为 4 行)