表信息:
公司名称 统计时间 金额 结算状态 税务 产品
公司A 2010年1月1号 20 已结算 1 A
公司A 2010年1月13号 40 已结算 3 B
公司A 2010年2月13号 40 已结算 3 B
公司A 2010年5月3号 50 未结算 4 A
公司B 2010年1月3号 10 已结算 3 C我想实现查询每个公司所有产品每个月的金额,比如A公司1月份总金额为60.以及所有公司的金额总计,已结算,未结算,税务
查询后的结果如下公司名称 月份 金额 结算状态
公司A 1 60 已结算
公司A 2 40 已结算
公司A 5 50 未结算
公司B 1 10 已结算
金额总计:160 已结算:110 未结算:50 税务:10
请问这条语句该怎么实现?
公司名称 统计时间 金额 结算状态 税务 产品
公司A 2010年1月1号 20 已结算 1 A
公司A 2010年1月13号 40 已结算 3 B
公司A 2010年2月13号 40 已结算 3 B
公司A 2010年5月3号 50 未结算 4 A
公司B 2010年1月3号 10 已结算 3 C我想实现查询每个公司所有产品每个月的金额,比如A公司1月份总金额为60.以及所有公司的金额总计,已结算,未结算,税务
查询后的结果如下公司名称 月份 金额 结算状态
公司A 1 60 已结算
公司A 2 40 已结算
公司A 5 50 未结算
公司B 1 10 已结算
金额总计:160 已结算:110 未结算:50 税务:10
请问这条语句该怎么实现?
SELECT 公司名称,CONVERT(VARCHAR(10),统计时间,120),结算状态,sum(金额)
FROM TB
GROUP BY 公司名称,CONVERT(VARCHAR(10),统计时间,120),结算状态
时间错了。
LEFT(统计时间,7)
insert into tb values('公司A', '2010年1月1号' ,20 ,'已结算', 1 ,'A')
insert into tb values('公司A', '2010年1月13号' ,40 ,'已结算', 3 ,'B')
insert into tb values('公司A', '2010年2月13号' ,40 ,'已结算', 3 ,'B')
insert into tb values('公司A', '2010年5月3号' ,50 ,'未结算', 4 ,'A')
insert into tb values('公司B', '2010年1月3号' ,10 ,'已结算', 3 ,'C')
goselect 公司名称,
convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120) 月份,
sum(金额) 金额,
结算状态
from tb
group by 公司名称,convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态drop table tb/*
公司名称 月份 金额 结算状态
-------------------- ------- ----------- ----------
公司A 2010-01 60 已结算
公司A 2010-02 40 已结算
公司A 2010-05 50 未结算
公司B 2010-01 10 已结算(所影响的行数为 4 行)
*/
这种好像可以汇总得到,等高手来写
我一般是用
union all
select '','',sum(金额),'已结算' from [xxx刚才那个] where 结算状态='已结算'
union all
select '','',sum(金额),'未结逄' from [xxx刚才那个] where 结算状态='未结算'也就是放入那个集合的最后两行
可能把前面那个整成cte
convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120) 月份,
sum(金额) 金额,
结算状态
from tb
group by 公司名称,convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态
select 公司名称,
convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120) 月份,
结算状态,sum(金额) 金额,s1='',s2='',s3='',s4=''
from #tb
group by 公司名称,convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态
UNION ALL
SELECT '金额总计',cast(sum(金额)as varchar),'已结算',sum(case when 结算状态='已结算' then 金额 else 0 end),
'未结算',cast(sum(case when 结算状态='未结算' then 金额 else 0 end) as varchar),'税务',
cast(sum(case when 结算状态='已结算' then 税务 else 0 end) as varchar)
FROM #tb/************** 结果 *****************
公司A 2010-01 已结算 60
公司A 2010-02 已结算 40
公司A 2010-05 未结算 50
公司B 2010-01 已结算 10
金额总计 160 已结算 110 未结算 50 税务 10
***********************************************/围观高手最优
select 公司名称 ,sum(金额) 金额,年月=convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态
from tb
group by 公司名称,convert(varchar(7),cast(replace(replace(replace(统计时间,'年','-'),'月','-'),'号','') as datetime),120),结算状态select '金额总计:',
(select sum(金额)),
'已结算',
(select sum(金额) from tb where 结算状态='已结算'),
'未结算',
(select sum(金额) from tb where 结算状态='未结算'),
'税务',
(select sum(税务) from tb where 结算状态='已结算')
from tb
借4楼代码送LZ,