首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求 大伙儿帮忙写个SQL

2013-07-01 
求 大家帮忙写个SQL有2个表CREATE TABLE T1--表1 (SNO INT ,SLineNO INT,Qty INT,ASNO INT,ASLineNO INT)

求 大家帮忙写个SQL
有2个表


CREATE TABLE T1  --表1
 ( 
    SNO INT , 
    SLineNO INT,
    Qty INT,
    ASNO INT,
    ASLineNO INT
); 
INSERT INTO T1 VALUES
(1001,1,10,1009,1),
(1001,2,10,1009,2),
(1002,1,10,1009,1),
(1003,1,10,2009,1),
(1003,2,10,2009,2),
(1004,1,10,2009,2),
(1005,1,10,3009,1),
(1005,2,10,4009,1);

CREATE TABLE T2--表2
 (  ASNO INT,
    ASLineNO INT,
    AQty INT,
); 

INSERT INTO T2 VALUES
(1009,  1,10),
(1009,2,10),
(2009,1,10000),
(2009,2,20),
(3009,1,10),
(5009,1,30),
(6009,1,10);

介绍;表1  的主键是  SNO,SlineNO, 表2 的主键是 ASNO, ASLineNO
表2 中的一行,可以对应表1中的多行,其中表2中的AQTY 是该行对应的表1中行的合计
表1的一个SNO下不同的行,可能对应 表2 的不同的ANO的不同的行
要求抽出的结果

SNOSLineNOQtyASNOASLineNO
100111010091
100121010092
100211060091


可以这么理解 表2 的一个ASNO 对应表1的 复数个SNO,表2 的SNO有很多行,可以对应表1 的更多的行 ,以此类推,但是绝对不会出现无限的循环。 

抽出的结果就是 表1,表2 都存在而且 数量恰好都一致的数据。

[解决办法]
好像1005也符合吧
SELECT *
FROM 
(SELECT SNO,SLINENO,SUM(QTY)QTY,ASNO,ASLINENO FROM t1 
GROUP BY SNO,SLINENO,ASNO,ASLINENO)A 
INNER JOIN T2 B ON A.ASNO=B.ASNO AND A.SLINENO=B.ASLINENO
WHERE A.QTY=B.AQTY 
/*
SNO         SLINENO     QTY         ASNO        ASLINENO    ASNO        ASLineNO    AQty
----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
1001        1           10          1009        1           1009        1           10
1001        2           10          1009        2           1009        2           10
1002        1           10          1009        1           1009        1           10


1005        1           10          3009        1           3009        1           10
*/


[解决办法]

--这样也可以哦
select T1.* from T1,T2,(select * from T1 WHERE ASNO NOT IN (SELECT ASNO FROM T2))T3
where T1.ASNO = T2.ASNO AND 
T1.ASLineNO = T2.ASLineNO AND
T1.Qty = T2.AQty AND T1.SNO <> T3.SNO

热点排行