求一表和两表内的数据查询方法 !十分感谢
一:我这里有一个表
ID 产品类型 生产厂商
1 电话 aa
2 烟 bb
3 洒 bb
4 电话 dd
5 烟 cc
6 洒 bb
想统计成这样的表
生产厂商 电话 烟 洒
aa 1 0 0
bb 0 1 2
cc 0 1 0
dd 1 0 0
二:有表owner和表money
表owner
xm bh xsrq
张三 1 2004-1-1
李四 2 2004-2-1
王五 3 2004-3-1
表money
fzbh kxmc fs je 日期
1 轿车 现金 10000 2004-1-1
1 卡车 现金 20000 2004-2-1
2 货车 按揭 30000 2004-3-1
2 货车 欠款 40000 2004-4-1
3 火车 现金 50000 2004-5-1
3 飞机 按揭 60000 2004-6-1
3 卡车 欠款 70000 2004-7-1
要求得到以下结果,该如何写SQL
2004-01-01 到 2004-04-01的数据
xm bh 轿车 卡车 货车 火车 飞机 现金 按揭 欠款
张三 1 10000 20000 30000
李四 2 70000 30000 40000
合计 10000 20000 70000 30000 30000 40000
上面是题目
第一题的数据
create table Home
(
IDnum int,
cplx varchar(10),
sccs varchar(5),
)
insert into Home values(1,'电话','aa')
insert into Home values(2,'烟','bb')
insert into Home values(3,'酒','bb')
insert into Home values(4,'电话','dd')
insert into Home values(5,'烟','cc')
insert into Home values(6,'酒','bb')
我做了第一题,可是和题目要求还是有差别
我的sql语句是
select 生产厂商=sccs,
电话=(case
when cplx ='电话' then count('电话') else 0
end),
烟=(case
when cplx= '烟' then count('烟') else 0
end),
酒=(case
when cplx= '酒' then count('酒') else 0
end)
from Home group by sccs,cplx
结果是
生产厂商 电话 烟 酒
----- ----------- ----------- -----------
aa 1 0 0
dd 1 0 0
bb 0 0 2
bb 0 1 0
cc 0 1 0
我的两个bb 还是分开的
bb 0 0 2
bb 0 1 0
题目要求是在一起的,求高手帮助,明天中午来给分
问题点数:20、回复次数:5Top
1 楼flybirdlc(己所不欲.勿施于人)回复于 2006-06-02 01:33:37 得分 0
上面是两题。
一后面的是第一题
二是第二题
分开的Top
2 楼jixiaojie(太多借口)回复于 2006-06-02 08:25:34 得分 10
第一题:
select 生产厂商=sccs,
电话=sum(case
when cplx ='电话' then 1 else 0
end),
烟=sum(case
when cplx= '烟' then 1 else 0
end),
酒=sum(case
when cplx= '酒' then 1 else 0
end)
from Home group by sccs
Top
3 楼jixiaojie(太多借口)回复于 2006-06-02 08:50:13 得分 4
第二题:
create table owner (xm varchar(20),bh int,xsrq datetime)
create table [money] (fzbh varchar(30),kxmc varchar(30),fs varchar(30),je money ,dtime datetime)
insert into owner
select '张三','1','2004-1-1' union all
select '李四','2','2004-2-1' union all
select '王五','3','2004-3-1'
insert into [money]
select '1','轿车','现金',10000,'2004-1-1' union all
select '1','卡车','现金',20000,'2004-2-1' union all
select '2','货车','按揭',30000,'2004-3-1' union all
select '2','货车','欠款',40000,'2004-4-1' union all
select '3','火车','现金',50000,'2004-5-1' union all
select '3','飞机','按揭',60000,'2004-6-1' union all
select '3','卡车','欠款',70000,'2004-7-1'
go
select xm=(case when grouping(a.xm)=1 then '合计' else a.xm end) ,
fzbh=(case when grouping( b.fzbh)=1 then 'NULL' else b.fzbh end),
轿车=sum(case when b.kxmc='轿车' then b.je else 0 end),
卡车=sum(case when b.kxmc='卡车' then b.je else 0 end),
货车=sum(case when b.kxmc='货车' then b.je else 0 end),
火车=sum(case when b.kxmc='火车' then b.je else 0 end),
飞机=sum(case when b.kxmc='飞机' then b.je else 0 end),
现金=sum(case when b.fs='现金' then b.je else 0 end),
按揭=sum(case when b.fs='按揭' then b.je else 0 end),
欠款=sum(case when b.fs='欠款' then b.je else 0 end)
from owner a join [money] b
on a.bh=b.fzbh
where b.dtime between '2004-01-01' and '2004-04-01'
group by a.xm,b.fzbh with rollup
having grouping(a.xm)=grouping(b.fzbh)
order by b.fzbh
张三 1 10000.0000 20000.0000 .0000 .0000 .0000 30000.0000 .0000 .0000
李四 2 .0000 .0000 70000.0000 .0000 .0000 .0000 30000.0000 40000.0000
合计 NULL 10000.0000 20000.0000 70000.0000 .0000 .0000 30000.0000 30000.0000 40000.0000
Top
4 楼wlmail2005(菜菜菜)回复于 2006-06-02 09:13:37 得分 3
markTop
5 楼jasonren(jason)回复于 2006-06-02 09:21:14 得分 3
1.sql2005 pivot就行了.
2.jixiaojie(太多借口) 的方法可行.Top




