CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

还是关于 SQL 语句

楼主TT008(T T)2002-03-27 16:33:37 在 MS-SQL Server / 基础类 提问

已知表A   表B   求表C的SQL语句  
  表A:  
  NO   名称 数量  
  1       A   10  
  2       B   20  
  3       A   30  
  4       B             40  
  表B:  
  名称 数量  
  A   100  
  B   200  
  A   300  
  B   400  
   
  表C:  
  NO. 名称 数量A 数量B 数量C  
  1 A 10     400     -390  
  2 B 20     600     -580  
  3 A 30         -360  
  4 B 40         -540  
   
  数B   为表B   同一名称的数量合计,数量C   为数量A   -   数量C   的分别累计  
  注意:3,4   中的数量B   不要显示出来,也就是说同一名称的数量B   只显示一次  
   
  问题点数:30、回复次数:8Top

1 楼TT008(T T)回复于 2002-03-27 16:39:35 得分 0

以下语句要怎么样改才可以?  
  select   a.*,(select   sum(数量)   from   b   where   名称=TA.名称)   as   数量B,  
  (select   sum(数量)   from   A   where   名称=TA.名称   AND   NO<=TA.NO)-(select   sum(数量)   from   b   where   名称=TA.名称)   as   数量C  
  from   a   TA  
  不知道这用   SQL   能不能实现?!!!Top

2 楼TT008(T T)回复于 2002-03-27 16:48:53 得分 0

 
  数量B是表B数量的合计,在查询中只显示同一名称合计数量一次  
  不知道这用SQL语句能不能实现?Top

3 楼TT008(T T)回复于 2002-03-27 16:55:29 得分 0

SELECT   单NO,   名称,   数量   AS   数量A,   (select   sum(数量)   from   BB   where   名称=TA.名称)   AS   数量B,   ((select   sum(数量)   from   AA   where   名称=TA.名称   AND   单NO<=TA.单NO)-(select   sum(数量)   from   BB   where   名称=TA.名称))   AS   数量C  
  FROM   AA   AS   TA  
  不知要如何改上面的语句才可实现以上功能  
  Top

4 楼icevi(按钮工厂)回复于 2002-03-27 18:17:41 得分 0

select   ta.id,ta.name,ta.mount   as   mounta,  
                case   when   t3.mount   is   null   then   t2.mount   else   0   end   as   mountb,  
                ta.mount+isnull(t3.mount,0)-t2.mount   as   mountc  
  from    
                (select   ta.id,sum(tb.mount)     as   mount  
                from   ta   join   tb   on   ta.name=tb.name  
                group   by   ta.id)   t2    
                left   join    
                (select   t1.id,sum(ta.mount)   as   mount  
                from   ta   join   ta   t1   on   ta.id<t1.id   and   ta.name=t1.name  
                group   by   t1.id)   t3    
                on   t2.id=t3.id  
                join   ta   on   t2.id=ta.idTop

5 楼TT008(T T)回复于 2002-03-27 19:41:04 得分 0

太高深了,看不懂  
  可否解释一下?  
  在ACCESS2000里是否可以测试?Top

6 楼iamknight(侠客)回复于 2002-03-27 20:01:52 得分 0

为什么非得在一个SQL语句中解决呢。  
   
  如果采用存储过程来解决这个问题是不是更容易一些,维护起来也方便了些呢?Top

7 楼TT008(T T)回复于 2002-03-27 20:16:04 得分 0

用存储过程,我是要查询出表C,所以要用SQL语句  
  Top

8 楼icevi(按钮工厂)回复于 2002-03-28 08:56:35 得分 0

我用的是SQL   SERVER   2000,这个论坛也是SQL   SERVER的,你可以转到数据库基础版去问,在这里要是不明说,都会以为你是MSSQL的。  
   
  用ACCESS可能可以用一条语句搞定。我还没有试。Top

9 楼icevi(按钮工厂)回复于 2002-03-28 09:17:13 得分 30

SELECT   TA.ID,   TA.Name,   TA.mount   AS   mounta,    
        IIf(IsNull((SELECT   sum(t3.mount)   FROM   ta   as   t3    
            INNER   JOIN   ta   AS   t1   ON   (t3.name=t1.name)   AND   (t3.id<t1.id)    
            where   t1.id=ta.id)),  
          (SELECT     sum(tb.mount)    
                FROM   ta   as   t2   INNER   JOIN   tb    
                ON   t2.name=tb.name   where   t2.id=ta.id),0)   AS   mountb,    
        (SELECT   iif(isnull(sum(t3.mount)),0,sum(t3.mount))    
              FROM   ta   as   t3   INNER   JOIN   ta   AS   t1   ON   (t3.name=t1.name)   AND   (t3.id<t1.id)    
              where   t1.id=ta.id)  
        +[mount]-  
        (SELECT     sum(tb.mount)    
              FROM   ta   as   t2   INNER   JOIN   tb   ON   t2.name=tb.name    
              where   t2.id=ta.id)   AS   mountc  
  FROM   TA;  
  Top

相关问题

  • 还是sql语句问题!!!
  • 还是求SQL语句
  • 还是sql语句的写法
  • 还是SQL语句,这句更简单
  • 还是那条长长的SQL语句!!!
  • 还是SQL语句的问题
  • 用存储过程还是 sql 语句 ?
  • 还是关于SQL语句的写法
  • 求SQL语句
  • sql语句。

关键词

  • 语句
  • 数量
  • 名称
  • 表
  • ta
  • 同一
  • 显示
  • select sum
  • where

得分解答快速导航

  • 帖主:TT008
  • icevi

相关链接

  • SQL Server类图书

广告也精彩

反馈

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