多表统计分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

问题:表A:  Id        Number  1001        5  1002        6  1003        7  表B:  ID          Money  1001           10  1007           12  我要的结果是:  ID        Number          Money  1001      5               10  1002      6               Null  1003      7               Null  1007      Null            12   解决方案:select COALESCE(a.id,b.id)as ID,sum(a.number) number,sum(b.Money) Money  from A full join B on a.id=b.id  group by  COALESCE(a.id,b.id)问题:我要做一个多表统计。有这样四个表      USER(用户名,部门,职务)      Table1(序号1,用户名,工作一)      Table2(序号2,用户名,工作二)      Table3(序号3,用户名,工作三)    其中,User表为用户信息表,存放所有的用户基本信息,后三个表的‘用户名’均为User表中的用户。我想作一个统计,统计每一个用户作“工作一”、“工作一”、“工作一”的次数。相当于将后三个表分别作统计,然后汇总成一张表。结果显示为如下形式:    用户名 工作一次数 工作二次数 工作三次数      a            5        7          9      b            0        76         5      c            4        55         44      d            9        0          0    其中,0表示在该表在没有该用户的记录。      请问各位高手,该如何做? 解决方案1:select      a.用户名,      工作一次数 = (select isnull(count(*),0) from table1 where 用户名=a.用户名),      工作二次数 = (select isnull(count(*),0) from table2 where 用户名=a.用户名),      工作三次数 = (select isnull(count(*),0) from table3 where 用户名=a.用户名)  from      USER a  order by      a.用户名解决方案2:select a.用户名,[工作一次数]=sum(case when b.[工作一] is null then 0 else 1 ),      [工作二次数]=sum(case when c.[工作二] is null then 0 else 1 ),      [工作三次数]=sum(case when d.[工作三] is null then 0 else 1 ),  from      [USER] a left join table1 b on a.用户名 = b.用户名  left join   table2 c on a.用户名 = c.用户名  left join   table3 d on a.用户名 = d.用户名  group by a.用户名问题:现有cpb和xsqkb两个表cpb数据如下产品号     产品型号                  生产厂家          单价CP001 KF-25GW/11BP        海信      2300CP002 KF-25GW/22BP        海信      2300CP003 KFR-35GW/29BP       海信      3600CP004 KFR-25GW/99SZBP     海信      5300CP005 KFR-26GW/76ZBP      海信      3400CP006 KFR-23GW/77VZBP     海信      3000CP007 KFR-32GW/76ZBP      海信      3700CP008 KFR-32GW/77VZBP     海信      3600CP009 KFR-35GW/77ZBP      海信      4000CP010 KFR-40GW/77ZBP      海信      4600CP011 KFR-50GW/09BP       海信      5400CP012 KFR-32GW/29RBP      海信      3600CP013 KFR-32GW/11BP       海信      3400xsqkb 表 数据    产品号   职工号      销售时间                 销售数量    CP001 ZG001 2006-10-03 00:00:001CP001 ZG006 2006-11-11 00:00:009CP002 ZG002 2006-09-21 00:00:008CP002 ZG009 2006-05-30 00:00:004CP003 ZG004 2005-02-23 00:00:003CP003 ZG004 2006-03-10 00:00:003CP003 ZG004 2006-05-02 00:00:003CP003 ZG006 2006-02-12 00:00:007CP004 ZG007 2005-06-18 00:00:008现求销售销量排前三位的空调的型号,生产厂家和单价我给出的SQL语句为select distinct 产品型号 ,生产厂家,单价 from cpb inner join xsqkb on cpb.产品号=xsqkb.产品号where cpb.产品号 in      (select top 3 with ties 产品号 as aa from xsqkb      group by (cph)     order by aa desc)虽然能解决问题但自己感觉很别扭,请帮我改一下,看能不能多给几个比较好的解决办法.解决方案1:语句应该是这样:select  distinct  产品型号,生产厂家,单价    from  cpb  inner  join  xsqkb  on  cpb.产品号=xsqkb.产品号  where  cpb.产品号  in             (select  top  3   产品号, sum(销售量)as  xsl  from  xsqkb             group  by  (产品号)           order  by  xsl  desc)解决方案2:select产品型号,生产厂家,单价fromcpbwherecpb.产品号in       (select  top  3   产品号, sum(销售量)as  xsl  from  xsqkb             group  by  (产品号)           order  by  xsl  desc)问题:主从表结构:    主表结构及数据:    授课表1   id      老师姓名    所带学生档案号  团体/个人     2           王二        1              团体  3           王二        2              团体  4           王二        3              团体  5           王二        4              团体  6           王二        5              个人   7           王二        6              个人   8           王二        7              个人   9           王二        8              个人   10          李四        12              个人     授课表2(从表)    对应表1id    所学课目      所需金额(元/小时)    2              数学         10  3              数学         10  4              数学         10  5              数学         10  6              英文         10  7              英文         10  8              中文         10  9              中文         10    10             中文         10  10             英文         10  10             数学         10               现要求作出如下表,不能使用临表,     可出sql server和oracle 下通用  不必一条语句完成                     人数         所带课程(数量)     所需金额(元/小时)  -------------------------------------------------------------    老师    小   团   个      小  英  数  中     小  英  数  中        姓名    计   体   人      计  文  学  文     计  文  学  文  -------------------------------------------------------------  王二     8    4     4      8   2   4   2      80  20  40  20     李四     1          1      3   1   1   1      30  10  10  10  --------------------------------------------------------------  合计     9    4     5      11  3   5   3     110  30  50  30  解决方案1:恐怕没那么容易写成通用的SQL语句,给你一个SQL Server的:  ---------------------------------------------------------------------  --生成测试数据  create table 授课表1(id int,老师姓名 varchar(20),所带学生档案号 int,[团体/个人] varchar(20))  insert into 授课表1 select 2 ,'王二',1 ,'团体'  insert into 授课表1 select 3 ,'王二',2 ,'团体'  insert into 授课表1 select 4 ,'王二',3 ,'团体'  insert into 授课表1 select 5 ,'王二',4 ,'团体'  insert into 授课表1 select 6 ,'王二',5 ,'个人'   insert into 授课表1 select 7 ,'王二',6 ,'个人'   insert into 授课表1 select 8 ,'王二',

1 / 65
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功