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

请教SQL语句合并字段的写法。

楼主Dala(Dala)2001-11-19 22:22:01 在 C++ Builder / 基础类 提问

Table1  
  姓名         创收  
  A               2000  
  B                 300  
  A                 200  
  Table2  
  姓名         花费  
  A                 400  
  B                 200  
  现在想得到一个综合结果,如下  
  姓名         创收         花费  
  A               2200           400  
  B                 300           200 问题点数:64、回复次数:13Top

1 楼xiaowen72(小老鼠)回复于 2001-11-19 22:35:51 得分 0

insert   into   kk   select   a.name,a.in,b.out   from   a,b   where   a.name=b.name   Top

2 楼Dala(Dala)回复于 2001-11-19 23:16:04 得分 0

老鼠的SQL好象不行:1.没有用SUM求和;2.如果表2中没有B的记录,则不能满足a.name=b.nameTop

3 楼chiliast(钓鱼太郎)回复于 2001-11-19 23:28:03 得分 6

select   table1.姓名,sum(table1.创收)   创收,min(table2.花费)   花费    
  from   table1,table2    
  where   table1.姓名   =   table2.姓名    
  group   by   table1.姓名Top

4 楼chiliast(钓鱼太郎)回复于 2001-11-19 23:42:37 得分 0

表2没有B的记录应该是正确的  
  因为B根本没有花费,所以结果不可能出现在你的综合结果中  
  如果强行要放进去也可以  
  把where   table1.姓名   =   table2.姓名   改为   table1.姓名   in   (select   table1.姓名   from   table1)  
   
  Top

5 楼nononono(null,null)回复于 2001-11-20 00:00:35 得分 10

如果A有创收无花费,   B无创收有花费,   怎么办?  
   
  这个算法用外连接是比较规矩的做法  
   
  select   table1.姓名,sum(table1.创收)   创收,min(table2.花费)   花费    
  from   table1   FULL   OUTER   JOIN   table2   ON   table1.姓名   =   table2.姓名    
  group   by   table1.姓名  
   
  Top

6 楼Dala(Dala)回复于 2001-11-20 00:07:49 得分 0

钓鱼太郎的SQL还是不行。  
  其实表3的姓名中应该包括所有出现在表1和表2姓名中的记录,如果某人在表1中没出现,则相当于创收为0;同样如果某人在表2中没出现,则相当于花费为0.  
  再举例Table1  
  姓名         创收  
  A             2000  
  C               300  
  A               200  
  Table2  
  姓名         花费  
  A                 400  
  B                   20  
  D                 200  
  现在想得到一个综合结果,如下  
  姓名         创收         花费  
  A             2200         400  
  B                   0           20  
  C               300             0  
  D                   0         200Top

7 楼Dala(Dala)回复于 2001-11-20 00:20:53 得分 0

根据NONONONO,使用如下SQL得到十分接近的结果(表1中没有的姓名未显示)  
  select   table1.姓名,sum(table1.创收)   创收,sum(table2.花费)   花费    
  from   table1   FULL   OUTER   JOIN   table2   ON   table1.姓名   =   table2.姓名    
  group   by   table1.姓名  
  姓名         创收         花费  
  A             2200         400  
                      0           20  
  C               300             0  
                      0         200    
  nononono请再帮忙看看,贴子加分了!  
  Top

8 楼Dala(Dala)回复于 2001-11-20 00:49:48 得分 0

Sorry,搞错了。上边SQL结果是:  
  姓名         创收         花费  
                                  220     <-错误地把B和D的花费值加在一起了  
  A               2200         800     <-错误地把A的花费400加了两次  
  C                 300  
  请SQL虾们继续大显身手啊!Top

9 楼l_kaifeng(江南大哥)回复于 2001-11-20 09:14:04 得分 16

以下为SQL   Server的语句  
  Select   '姓名'   =    
                case    
                            when   a.姓名   is   null   then   b.姓名  
                            else  
                                    a.姓名  
                end  
       
  a.花费   ,   b.创收  
   
  (   Select   sum(花费)   as   花费   from     Table2   Group   By   姓名   )As   a  
  Full   Outer   Join    
  (   Select   sum(创收)   as   创收   from     Table1   Group   By   姓名   )As   b  
   
  On   a.姓名         =   b.姓名           Top

10 楼l_kaifeng(江南大哥)回复于 2001-11-20 09:17:51 得分 0

哦,end   后面少了一个   逗号(,)Top

11 楼Dala(Dala)回复于 2001-11-21 12:42:09 得分 0

真遗憾,我的本地数据库不支持江南大哥的SQL   Server语句,thanks   anyway.  
  没办法我只能通过临时表的方法解决了。  
  SQL高低手们真的没办法直接用SQL语句解决该问题吗???????????Top

12 楼hellowbh(OneBowie)回复于 2001-11-21 14:21:45 得分 0

应当使用外连接!  
   
  select   a.姓名,a.创收,b.花费    
  from    
      (   select   table1.姓名,sum(table1.创收)   创收  
          from   table1    
          group   by   table1.姓名  
      )   as   a  
    full   outer   join    
    (  
        select   table2.姓名,sum(table2.花费)   花费  
        from   table2    
        group   by   table2.姓名  
    )   as   b  
    on   a.姓名=b.姓名    
  Top

13 楼hellowbh(OneBowie)回复于 2001-11-21 14:51:07 得分 32

改正一下。  
  select   isnull(a.姓名,b.姓名)   as   姓名,a.创收,b.花费    
  from    
      (   select   table1.姓名,sum(table1.创收)   创收  
          from   table1    
          group   by   table1.姓名  
      )   as   a  
  full   outer   join    
  (  
      select   table2.姓名,sum(table2.花费)   花费  
      from   table2    
      group   by   table2.姓名  
  )   as   b  
  on   a.姓名=b.姓名    
   
  (或者第一行为)  
  select   isnull(a.姓名,b.姓名)   as   姓名,isnull(a.创收,0)   as   创收,isnull(b.花费,0)   as   花费  
  否则有些查询出来的创收或花费为   NULL   ,也许你需要他们为   0.  
    Top

相关问题

  • [简单送分题]字段替换SQL语句写法。
  • sql语句更新备注字段的写法问题?
  • sql 语句写法.
  • sql语句写法
  • sql语句写法
  • SQL语句写法。
  • sql语句写法
  • sql语句- 写法!
  • sql语句写法:将表a的某几个字段的数据按照某个字段相同的原则插入到表b的某几个字段下?
  • 求Sql语句:根据一张表更新另一张表的字段的两种写法

关键词

  • sql
  • 创收
  • 姓名
  • 花费
  • 表
  • table
  • 结果
  • sum
  • 如下
  • 综合

得分解答快速导航

  • 帖主:Dala
  • chiliast
  • nononono
  • l_kaifeng
  • hellowbh

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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