首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一sql语句,自己好久没写sql了,快!解决思路

2012-03-18 
求一sql语句,自己好久没写sql了,快!问题:####################现在有三个表,其中a.cparent_id与b.cid相对

求一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个


[解决办法]
楼上牛人啊!!!

热点排行