㈠ 关于使用sql语句sum(case when……)来实现分类汇总功能
有两处有笔误,如果结果不同的话,需要检查一下,先对比下总金额,再对比各个的销售额,再检查姓名是否完全一致,EXCEL中经常有前后空格或是不容易显示出来的字符会有影响,用select 月份,姓名,sum(销售数量*产品单价) from 表格 group by 月份,姓名
例如:
select
月份,
sum(casewhen销售人员='姓名1'then销售数量*产品单价else0end)as姓名1销售额,
sum(casewhen销售人员='姓名2'then销售数量*产品单价else0end)as姓名1销售额,
sum(casewhen销售人员='姓名3'then销售数量*产品单价else0end)as姓名1销售额
from表格
groupby月份,销售人员
(1)sql进行分类汇总扩展阅读:
注意事项
case when有用两种用法如下:
用法一:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
用法二:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
㈡ 就SQL如何将不同行的数据分类汇总到列
将不同行的数据分类汇总到列语句如下:
1)insert into table1 select * from table2
2) select into table 1 select *from table2
这两种写法有什么区别呐,首先insert into这种写法必须有table1列,select则是在access中必须不能存在table1,否则在ado接口中会出现报错的现象。
进行数据库的操作,这里使用的是ado+access进行的数据库的操作,目前来看,ado这种方式还算是比较简单。
㈢ 跪求,sql命令实现分类汇总统计
--1.建表
CreateTableT
(
地区Varchar(10),
姓名Varchar(10),
性别Varchar(2),
名族Varchar(10),
单位类型Varchar(50)
)
--2.插入测试数据
InsertIntoTValues('北京','张三','男','汉族','企业')
InsertIntoTValues('天津','李四','女','回族','公务员')
InsertIntoTValues('上海','王五','男','汉族','事业单位')
InsertIntoTValues('东北','周一','女','壮族','创业')
InsertIntoTValues('北京','李二','男','藏族','公务员')
--3.查询结果
Declare@ForinVarchar(4000)='[男],[女]'
Declare@FieldVarchar(4000)='Isnull(男,0)AS男,Isnull(女,0)As女'
--动态拼接名族
Select@Forin=@Forin+',['+名族+']',
@Field=@Field+',Isnull('+名族+',0)As'+名族
From
(
SelectDistinct名族FromT
)S
--动态拼接单位类型
Select@Forin=@Forin+',['+单位类型+']',
@Field=@Field+',Isnull('+单位类型+',0)As'+单位类型
From
(
SelectDistinct单位类型FromT
)S
--分别按地区性别,地区名族和地区单位类型分组统计人数,然后再行列转换
Exec
(
'Select项目,'+@Field+'From
(
Select地区As项目,性别As值,Count(*)As人数FromTGroupBy地区,性别
UnionAll
Select地区As项目,名族As值,COUNT(*)As人数FromTGroupBy地区,名族
UnionAll
Select地区As项目,单位类型As值,COUNT(*)As人数FromTGroupBy地区,单位类型
)s
Pivot
(
Max(人数)
For值in('+@Forin+')
)pvt'
)
㈣ sql如何在多个表中的数据分类汇总到一个表里
create proc Mypro
as
begin
declare @t table(个人编号 varchar(10),工资 money,养老保险 money,年金 money,住房公积金 money)
insert into @t(个人编号,工资,养老保险,年金) select * from 表一
insert into @t select * from 表二
insert into @t select * from 表三
delete from @t where
exists(select * from @t where exists(select 个人编号,工资,养老保险,年金 from @t group by 个人编号,工资,养老保险,年金 having Count(*)>1) and 住房公积金 is null)
declare @t1 table(个人编号 varchar(10),工资 money,养老保险 money,年金 money,住房公积金 money)
insert into @t1 select distinct * from @t
select 个人编号,
sum(工资) as工资总和,avg(工资) as工资平均值,
sum(养老保险) as 养老保险总和,avg(养老保险) as 养老保险平均值,
sum(年金) as 年金总和,avg(年金) as 年金平均值,
sum(住房公积金) as 住房公积金总和,avg(住房公积金) as 住房公积金平均值
from @t1 group by 个人编号
end
--存储过程直接查询出你想要的数据,因为不知道你要总汇总和还是总汇平均值,你自己改下
--然后执行 insert into 表四 exec Mypro 插入你的表四吧
㈤ SQL分类汇总
首先SLQ语句不会呈现你这种EXCEL的小计合计分类显示,SQL显示行数据必须保持列字段一致性。所以建议你将小计列写个SUM的子查询,以客户名称为关键字拼接,那么你最后显示的结果是:客户名称,客户类型,规格型号,数量,金额,小计数量,小计金额。
总结:SQL结果行显示形式必须和列字段一致,小计合计必然通过其他软件做处理
㈥ 怎么用SQL语句对表【收支表】进行分类汇总
--建立测试表 并插入数据
-- 执行一个查询 ,你可以写在一个存储过程里面,我困了,不过格式按照你说的写好了
CREATETABLETB
(说明NVARCHAR(20)
,
类别NVARCHAR(20),
金额INT,
款项类别NVARCHAR(20)
)
INSERTINTOdbo.TB
(说明,类别,金额,款项类别)
VALUES(N'项目A',--说明-nvarchar(20)
N'支出',--类别-nvarchar(20)
900,--金额-int
N'费用B'--款项类别-nvarchar(20)
)
INSERTINTOdbo.TB
(说明,类别,金额,款项类别)
VALUES(N'项目A',--说明-nvarchar(20)
N'收入',--类别-nvarchar(20)
2000,--金额-int
N'收入A'--款项类别-nvarchar(20)
)
INSERTINTOdbo.TB
(说明,类别,金额,款项类别)
VALUES(N'项目B',--说明-nvarchar(20)
N'支出',--类别-nvarchar(20)
3500,--金额-int
N'费用C'--款项类别-nvarchar(20)
)
INSERTINTOdbo.TB
(说明,类别,金额,款项类别)
VALUES(N'项目C',--说明-nvarchar(20)
N'支出',--类别-nvarchar(20)
200,--金额-int
N'费用D'--款项类别-nvarchar(20)
)
INSERTINTOdbo.TB
(说明,类别,金额,款项类别)
VALUES(N'项目A',--说明-nvarchar(20)
N'支出',--类别-nvarchar(20)
300,--金额-int
N'费用A'--款项类别-nvarchar(20)
)
CREATETABLE#temp
(
说明NVARCHAR(20),
类别NVARCHAR(20),
金额INT,
款项类别NVARCHAR(20)
)
INSERTINTO#temp
SELECT*
FROMdbo.TB
UNIONALL
SELECT说明,
CASEWHEN说明ISNOTNULLTHENISNULL(类别,'收支净值')
ELSE类别
END+'合计'AS类别,
SUM(CASEWHEN类别='收入'THEN金额
ELSE-金额
END)AS金额,
MAX(款项类别)AS款项类别
FROMTB
WHERE说明ISNOTNULL
GROUPBYROLLUP(说明,类别)
ORDERBY说明INSERT#temp
SELECTB.*
FROM(SELECTDISTINCT
说明,
'收入合计'AS类别,
0AS金额,
''AS款项类别
FROM#temp
WHERE说明ISNOTNULL
)B
WHEREB.说明+B.类别NOTIN(SELECT说明+类别
FROM#temp
WHERE说明ISNOTNULL)
INSERT#temp
SELECTB.*
FROM(SELECTDISTINCT
说明,
'支出合计'AS类别,
0AS金额,
''AS款项类别
FROM#temp
WHERE说明ISNOTNULL
)B
WHEREB.说明+B.类别NOTIN(SELECT说明+类别
FROM#temp
WHERE说明ISNOTNULL);
WITHtt
AS(SELECT说明,
类别,
CASEWHEN类别='支出合计'THENABS(金额)
ELSE金额
ENDAS金额,
CASEWHEN类别='收入'
OR类别='支出'THEN款项类别
ELSE''
ENDAS款项类别,
CASEWHEN类别='支出'THEN1
WHEN类别='收入'THEN2
WHEN类别='收入合计'THEN3
WHEN类别='支出合计'THEN4
WHEN类别='收支净值合计'THEN5
ELSE6
ENDASnum
FROM#temp
WHERE说明ISNOTNULL
)
SELECTtt.说明,
tt.类别,
tt.金额,
tt.款项类别
FROMtt
ORDERBY说明,
num
DROPTABLE#temp
㈦ sql 实现 二级 分类汇总
设数据简略如图:分类汇总后,选中“C”列,按“F5”——“定位条件”——“空值”,如图:——“确定”——输入“=”——按“↑”——按“Ctrl”+“Enter”,如图:点,效果如图:不知虽不是你要的效果。
㈧ sql 分类汇总查询语句
select dept as 部门,sum(pay) as 合计,sum(case zt when '01'then 1 else 0 end) as 个数(01状态),
sum(case zt when '02'then 1 else 0 end) as 个数(02状态),count(*) as 总数
from 表 group by dept
以上,希望对你有所帮助
㈨ SQL条件分类汇总
只会点SQL 语句,写下来看看!代码如下:
1:
select 用户号,sum(收入) as 家庭收入,社区名 from shequbiao
group by 用户号,社区名
2:
先创建一个带参数的存储过程:
create procere 存储过程名
@id char(4)
as
update shequbiao set 社区名=(select 社区名 from shequbiao where 用户类型='户主'and 用户号=@id )
where 用户号=@id
然后执行:
exec 存储过程名 参数
3:
select 用户号 , sum(收入) as 家庭总收入,count(*)as 家庭总人数 ,用户名=(select 用户名 from shequbiao aa where 用户类型='户主'and aa.用户号=bb.用户号)
from shequbiao bb
group by 用户号
order by sum(收入) desc