CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

求一表和两表内的数据查询方法 !十分感谢

楼主flybirdlc(己所不欲.勿施于人)2006-06-02 01:32:52 在 MS-SQL Server / 基础类 提问

一:我这里有一个表  
   
  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

相关问题

关键词

得分解答快速导航

  • 帖主:flybirdlc
  • jixiaojie
  • jixiaojie
  • wlmail2005
  • jasonren

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo