问题:表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 ,'王二',