(一)
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)
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
((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
表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.申请单号
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 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 语言极其灵活。