求一sql语句,自己好久没写sql了,快!
问题:####################
现在有三个表,其中a.cparent_id与b.cid相对应,a.cunit与c.cunit相对应
a:从记录表,有
“序号,父记录号,单位”几个字段
-----------
cid, cparent_id, cunit
1 1 u1
2 1 u2
3 1 u3
4 2 u2
5 2 u1
6 6 u4
7 7 u6
8 1 u11
9 9 u2
10 9 u1
11 10 u1
...
b:主记录表,有
“序号,类型,类型下属等级,年份” 几个字段
---------------
cid, ckind, clevel, cyear
1 A A1 1999
2 A A2 1999
3 A A3 1999
4 b b1 1998
5 A A1 1998
6 A A2 1998
7 B b1 1999
8 C c2 1997
9 B b3 1999
10 B b2 1999
c:基础表,表明a表中单位的从属类别
------------
cunit,ccategory
u1 c2
u2 c31
u3 c9
u4 c6
u5 c2
u6 c2
u7 c2
u8 c31
u9 c2
u10 c9
u11 c9
u12 c9
求
现要统计c中 各从属类别下面 按b中年份排列 获奖类别和等级的数量
如下:
==========
类别1
--------------------------------------------------------------------------
年份 类别a.子类别A1 类别a.子类别A2 类别a.子类别A3 类别b.子类别b1 类别b.子类别b2 类别c.子类别c1 类别c.子类别c3 ....
-------------------------------------------------------------------
1999 3个 2个 19个 1个 0个 ... .....
1999 13个 6个 1个 21个 10个 ... .....
1997 3个 2个 19个 1个 0个 ... .....
1996 13个 6个 1个 21个 10个 ... .....
....
==========
类别2
--------------------------------------------------------------------------
年份 类别a.子类别A1 类别a.子类别A2 类别a.子类别A3 类别b.子类别b1 类别b.子类别b2 类别c.子类别c1 类别c.子类别c3 ....
-------------------------------------------------------------------
1999 3个 2个 19个 1个 0个 ... .....
1999 13个 6个 1个 21个 10个 ... .....
1997 3个 2个 19个 1个 0个 ... .....
1996 13个 6个 1个 21个 10个 ... .....
....
%%%%%%%%%%%%%%%%%%%%%%
请问如何写sql?
[解决办法]
看晕了,先顶一下
[解决办法]
太长了,慢慢看,先帮顶
[解决办法]
汇总表是否写错..怎么 有两个1999? 还有类别一和二好象一个样,,?
[解决办法]
up
------解决方案--------------------
先顶下吧
[解决办法]
要下班了,有空再看
[解决办法]
实在是没看明白.帮顶.
[解决办法]
顶。
[解决办法]
下次再看,先休息了,,,
帮顶
[解决办法]
不明白
[解决办法]
up
[解决办法]
我帮忙顶!
[解决办法]
create table a(cid int, cparent_id int, cunit varchar(5))
insert a select 1, 1, 'u1 '
insert a select 2, 1, 'u2 '
insert a select 3, 1, 'u3 '
insert a select 4, 2, 'u2 '
insert a select 5, 2, 'u1 '
insert a select 6, 6, 'u4 '
insert a select 7, 7, 'u6 '
insert a select 8, 1, 'u11 '
insert a select 9, 9, 'u2 '
insert a select 10, 9, 'u1 '
insert a select 11, 10, 'u1 '
create table b(cid int, ckind varchar(5), clevel varchar(5), cyear int)
insert b select 1, 'A ', 'A1 ', 1999
insert b select 2, 'A ', 'A2 ', 1999
insert b select 3, 'A ', 'A3 ', 1999
insert b select 4, 'b ', 'b1 ', 1998
insert b select 5, 'A ', 'A1 ', 1998
insert b select 6, 'A ', 'A2 ', 1998
insert b select 7, 'B ', 'b1 ', 1999
insert b select 8, 'C ', 'c2 ', 1997
insert b select 9, 'B ', 'b3 ', 1999
insert b select 10, 'B ', 'b2 ', 1999
create table c(cunit varchar(5),ccategory varchar(5))
insert c select 'u1 ', 'c2 '
insert c select 'u2 ', 'c31 '
insert c select 'u3 ', 'c9 '
insert c select 'u4 ', 'c6 '
insert c select 'u5 ', 'c2 '
insert c select 'u6 ', 'c2 '
insert c select 'u7 ', 'c2 '
insert c select 'u8 ', 'c31 '
insert c select 'u9 ', 'c2 '
insert c select 'u10 ', 'c9 '
insert c select 'u11 ', 'c9 '
declare @sql varchar(4000)
set @sql= ' '
select @sql=@sql+ ', '+quotename( '类别 '+ckind+ '.子类别 '+clevel)+
'=rtrim(sum(case when b.ckind= '+quotename(ckind, ' ' ' ')+ ' and b.clevel= '+quotename(clevel, ' ' ' ')+ ' then 1 else 0 end))+ ' '个 ' ' '
from b group by ckind,clevel order by ckind asc,clevel asc
--print @sql
exec( 'select cyear '+@sql+ ' from c left join a on c.cunit=a.cunit right join b on a.cparent_id=b.cid group by cyear order by cyear desc ')
--drop table a,b,c
cyear 类别A.子类别A1 类别A.子类别A2 类别A.子类别A3 类别b.子类别b1 类别B.子类别b2 类别B.子类别b3 类别C.子类别c2
----------- -------------- -------------- -------------- -------------- -------------- -------------- --------------
1999 4个 2个 1个 1个 1个 2个 0个
1998 1个 1个 0个 1个 0个 0个 0个
1997 0个 0个 0个 0个 0个 0个 1个
[解决办法]
楼上牛人啊!!!