sql语句中的嵌套

 
(一)
sql语句中的嵌套
    原来一直认为sql语句再简单不过了,可是今天写起嵌套的时候频频出问题,一点也不顺手。发现在外部select结构的分组查询对子select语句没有作用,经过高手指点了一种好的方法:ISNULL,将子select语句放在之下,查询到条件符合就执行,没有符和的就跳过,不错不错,很好的完成了子句的查询,谢谢羊过指点哦~~
初始表TestTable中有date, productID,qty三个字段,qty有正有负,要按照date, productID对qty进行统计,实行正数累加,负数累加,读到视图中
    SELECT date, productID,
        ISNULL
          ((SELECT SUM(b.qty)
          FROM TestTable AS b
          WHERE b.qty > 0 AND b.[date] = c.[date] AND b.productID = c.productID), 0) 
            AS InputNum,
       ISNULL
          ((SELECT SUM(a.qty)
          FROM TestTable AS a
          WHERE a.qty < 0 AND a.[date] = c.[date] AND a.productID = c.productID), 0)
            AS OutputNum
FROM TestTable c
GROUP BY date, productID
 
 
 
(二)
如下几个表:  
  表1:采购申请表头                                                   表2:采购申请表体  
  申请单号         申请日期         制表人                       申请单号       物料编号         申请数量       回货日期  
  PR00001           05-01-05         A                               PR00001       38000001           200             05-02-10  
                                                                                  PR00001       38000002           500             05-02-20  
  表3:采购订单表头                                                   表4:采购订单表体  
  订单号       订单日期     制表人   申请单号                 订单号           物料编号     订单数量         回货日期  
  PO00001     05-01-07     B           PR00001                 PO00001       38000001         200               05-02-10  
  PO00002     05-01-08     B           PR00001                 PO00002       38000002         500               05-02-10  
   
  采购订单查询:  
  SELECT   A.订单号,A.申请单号,B.物料编号,B.订单数量,A.订单日期,B.回货日期  
  FROM   采购订单表体   B   INNER   JOIN   采购订单表头   A   ON   B.订单号=A.订单号  
   
  采购申请单查询:  
  SELECT   C.申请单号,C.申请日期,D.物料编号,D.申请数量,D.回货日期  
  FROM   采购申请单表头   C   INNER   JOIN   采购申请单表体   D   ON   C.申请单号=D.申请单号  
   
  求怎样把采购订单查询嵌套到采购申请单查询是去,才能只使用一个select语句就能查询出如下结果:  
  申请单号     申请日期     物料编号   申请数量     申请单回货日期   订单号     订单日期     订单数量   订单回货日期  
  PR00001     05-01-05     38000001     200               05-02-10       PO00001     05-01-07     200           05-02-10  
  PR00001     05-01-05     38000002     500               05-02-20       PO00002     05-01-08     500           05-02-10  
 
解:SELECT   F.申请单号,     F.申请日期,     F.物料编号,   F.申请数量,     F.申请单回货日期,   E.订单号,     E.订单日期,     E.订单数量,   E.订单回货日期    
  FROM    
  (SELECT   A.订单号   订单号,A.申请单号   申请单号,B.物料编号   物料编号,B.订单数量   订单数量,A.订单日期   订单日期,B.回货日期   回货日期  
  FROM   采购订单表体   B   INNER   JOIN   采购订单表头   A   ON   B.订单号=A.订单号)   E,  
   
  (SELECT   C.申请单号   申请单号,C.申请日期   申请日期,D.物料编号   物料编号,D.申请数量   申请数量,D.回货日期   回货日期  
  FROM   采购申请单表头   C   INNER   JOIN   采购申请单表体   D   ON   C.申请单号=D.申请单号)   F   WHERE   F.申请单号=C.申请单号
 
 
(三)
连接查询:
select a.name,a.sex,a.age
from student a,score b
where a.student_id=b.student_id and b.math_score>=90
order by a.sex
 
(四)

select Column_ID,Column_Name,Parent_ID,(select Column_Name from [Sort] where Column_ID=a.Parent_ID) Parent_Name,
(select Parent_ID from [Sort] where Column_ID=a.Parent_ID) Fathers_ID,
(select Column_Name from [Sort] where Column_ID=(select Parent_ID from [Sort] where Column_ID=a.Parent_ID)) Father_Name
from [sort] a where Column_Depth=3 order by father_Name desc,Parent_Name desc,Column_Name desc

比较牛B的sql语句,可以嵌套查询,还可以根据临时字段名排序

 
总结:SQL 语言极其灵活。
 

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值