SQL计算

takeshe 2010-11-09 02:58:58
表里有个字段:
a b c
10 管里费 09年
13 生产费 09年
11 代里费 09年
11 销售额 09年
10 管里费 10年
13 生产费 10年
11 代里费 10年
11 销售额 10年

下来还有很多费用~我想按年得到(管里费+生产费+代里费)/销售额~~应该怎么写呢(a字段是金额,各费用和销售额都在这里)
...全文
107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
heymal 2010-11-09
  • 打赏
  • 举报
回复
select c,([管里费]+[生产费]+[代里费])/[销售额]
from (select a,b,c from tb) as p
pivot
(sum(a) for b in ([管里费],[生产费],[代里费],[销售额])) as pvt

这个代码在2005以上版本使用
  • 打赏
  • 举报
回复
SELECT T1.SUMB/T2.SUMB,T1,C FROM
(SELECT SUM(b) SUMB,C FROM TABLE WHERE B IN ('管里费','生产费','代里费') GROUP BY C) T1,
(SELECT SUM(b) SUMB,C FROM TABLE WHERE B IN ('销售额') GROUP BY C) T2
WHERE T1.C=T2.C
王向飞 2010-11-09
  • 打赏
  • 举报
回复

--> 数据库版本:
--> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
--> 测试数据:[TB]
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[TB]')
AND type in (N'U'))
DROP TABLE [TB]
GO

---->建表
create table [TB]([a] int,[b] varchar(6),[c] varchar(4))
insert [TB]
select 10,'管里费','09年' union all
select 13,'生产费','09年' union all
select 11,'代里费','09年' union all
select 11,'销售额','09年' union all
select 10,'管里费','10年' union all
select 13,'生产费','10年' union all
select 11,'代里费','10年' union all
select 11,'销售额','10年'
GO

--管里费+生产费+代里费)/销售额

--> 查询结果
SELECT SUM(case when b in ('管里费','生产费','代里费') then a else 0 end )/SUM(case when b = '销售额' then a else 0 end)*1.0
FROM [TB]
group by c
--> 删除表格
--DROP TABLE [TB]

playwarcraft 2010-11-09
  • 打赏
  • 举报
回复

--该年如果没销售额的话,除数是0,会出错
select c,1.0*sum(case when b in('管里费','生产费','代里费') then a else 0 end)/sum(case when b='销售额' then a else 0 end) as [col]
from T
group by c

playwarcraft 2010-11-09
  • 打赏
  • 举报
回复
select c,sum(case when b in('管里费','生产费','代里费') then a else 0 end)/sum(case when b='销售额' then a else 0 end) as [col]
from T
group by c

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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