问个SQL语句
表
a(部门) b(项目) c(类别) d(金额)
111 土地 现金 100.00
111 土地 支票 200.00
111 工本 现金 100.00
用一条语句实现如下结果
部门 项目 数量 现金 支票 金额
111 土地 2 100.00 200.00 300.00
111 工本 1 100.00 0.00 100.00
怎么写SQL语句
问题点数:100、回复次数:24Top
1 楼caiyunxia(夏才云)回复于 2003-05-03 12:55:07 得分 0
select a as 部门, b as 项目,coun(*) as 数量 ,sum(case when c='现金' then d else 0 end) as 现金,sum(case when c='支票' then d else 0 end) as 支票,sum(d) as 金额
from table group by a,bTop
2 楼new_life(孙正方)回复于 2003-05-03 13:43:20 得分 0
学习
countTop
3 楼caiyunxia(夏才云)回复于 2003-05-03 13:44:54 得分 50
select a as 部门, b as 项目,count(*) as 数量 ,sum(case when c='现金' then d else 0 end) as 现金,sum(case when c='支票' then d else 0 end) as 支票,sum(d) as 金额
from table group by a,b
对,有点问题
COUN错了,是COUNT
Top
4 楼pengdali()回复于 2003-05-03 15:00:03 得分 50
declare @sql varchar(8000)
set @sql = 'select a 部门,b 项目,sum(1) 数量'
select @sql = @sql + ',sum(case c when '''+c+''' then d else 0 end) as ['+c+']'
from (select distinct c from 表) as a
select @sql = @sql+' from 表 group by a,b'
exec(@sql)
goTop
5 楼bzlj(bzlj)回复于 2003-05-03 15:45:36 得分 0
谢谢大家这么热心!谢谢!!!!!!!!!!!!!!!!
非常感谢 caiyunxia(monkey) 兄,你给我短消息的SQL没问题。谢谢!
Top
6 楼bzlj(bzlj)回复于 2003-05-03 15:48:10 得分 0
to:pengdali(大力)
也谢谢你,不过你都四星了,我就只给你10分,不要介意啊,我的很多问题你都留言解答,
谢谢!!!!!Top
7 楼pengdali()回复于 2003-05-03 15:48:14 得分 0
我的你没试吗?
哎!又白写了!
:)Top
8 楼caiyunxia(夏才云)回复于 2003-05-03 15:49:36 得分 0
大力,偷学了你很多Top
9 楼pengdali()回复于 2003-05-03 15:50:14 得分 0
你不给我分都可以但你要试试我写的!
老大,那里看不懂就说!不要浪费我的写的了~~~~
:)Top
10 楼bzlj(bzlj)回复于 2003-05-03 15:51:40 得分 0
to::pengdali(大力)
呵呵...我记下你的了,你的也对啊Top
11 楼pengdali()回复于 2003-05-03 15:52:24 得分 0
to caiyunxia(monkey)
不要这么说,大家互相学习嘛,论坛的目的是技术的最大化,谈不上"偷学"哈哈哈哈。。
你有空还要教教我哟!Top
12 楼bzlj(bzlj)回复于 2003-05-03 15:54:17 得分 0
to::pengdali(大力)
你是大哥,我是小弟!
我这马上去试试。谢谢
Top
13 楼caiyunxia(夏才云)回复于 2003-05-03 15:56:41 得分 0
我希望能教你
哈哈
到重庆,我请你吃火锅Top
14 楼caiyunxia(夏才云)回复于 2003-05-03 15:57:24 得分 0
大力肯定正确Top
15 楼pengdali()回复于 2003-05-03 16:03:28 得分 0
我说 monkey 改过个中文名吧!你都当爸爸了还monkey 估计你是属猴的!
Top
16 楼bzlj(bzlj)回复于 2003-05-03 16:04:40 得分 0
不对啊!
select @sql = @sql + ',sum(case c when '''+c+''' then d else 0 end) as ['+c+']'
from (select distinct c from 表) as a
这是一句吗,语法有问题样Top
17 楼pengdali()回复于 2003-05-03 16:07:04 得分 0
create table #表(a varchar(10),b varchar(100),c varchar(100),d money)
insert #表 values('111','土地','现金',100.00)
insert #表 values('111','土地','支票',200.00)
insert #表 values('111','工本','现金',100.00)
insert #表 values('111','工本','这里你随便加不用改代码',100.00)
declare @sql varchar(8000)
set @sql = 'select a 部门,b 项目,sum(1) 数量'
select @sql = @sql + ',sum(case c when '''+c+''' then d else 0 end) as ['+c+']'
from (select distinct c from #表) as a
select @sql = @sql+' from #表 group by a,b'
exec(@sql)
go
drop table #表Top
18 楼pengdali()回复于 2003-05-03 16:08:10 得分 0
语法没问题,是你改出问题了!你把你改的贴出来!Top
19 楼caiyunxia(夏才云)回复于 2003-05-03 16:10:52 得分 0
我说 monkey 改过个中文名吧!你都当爸爸了还monkey 估计你是属猴的!
不是
高中时同学的呢称Top
20 楼pengdali()回复于 2003-05-03 16:12:20 得分 0
to caiyunxia(monkey)
http://expert.csdn.net/Expert/TopicView1.asp?id=1735330Top
21 楼bzlj(bzlj)回复于 2003-05-03 16:18:20 得分 0
语法没问题,但
select @sql = @sql + ',sum(case c when '''+c+''' then d else 0 end) as ['+c+']'
from (select distinct c from #表) as a
这句中的
from (select distinct c from #表) as a
什么意思?
我知道实现的意思,但我从没写过这种语句。
怎么生成SQL语句的呢
谢谢Top
22 楼pengdali()回复于 2003-05-03 16:21:39 得分 0
from (select distinct c from #表) as a 是子查询,根据你表你的
现金.支票.动态得到 sum(case ...)
如果你不这样写,以后加了一个如汇款,你又要去改你的代码了,也就是说这样的话,可以动态根据表的实际内容得出你想要的结果
Top
23 楼caiyunxia(夏才云)回复于 2003-05-03 16:22:18 得分 0
动态SQLTop
24 楼bzlj(bzlj)回复于 2003-05-03 16:54:55 得分 0
谢谢你们两位了。
我自己再慢慢看看。Top




