开发者

another union all selecting all the rows that have not already been selected

开发者 https://www.devze.com 2023-02-28 21:01 出处:网络
Right now i have 2 select statements that are joined by a union what i was hopping to do was maybe name the first query like query1 and the second one query2 and then in my third query do a where book

Right now i have 2 select statements that are joined by a union what i was hopping to do was maybe name the first query like query1 and the second one query2 and then in my third query do a where bookno not in query1 or query2.

SELECT  distinct    t0.BOOKNO, t0.PaxName, t0.Locator, t0.FDATE7, 
                          t0.BOARD, t0.ALIGHT, t0.AIRLINE, t0.FNUMBR, t0.DEP, 
                          t0.ARR, t0.TOUR, t0.ROUTE,
                           t1.tour, t1.route, t1.sfrom , t1.sto,t1.seq,t0.seq, 'yes'
    FROM     
      (  SELECT     TOP (100) PERCENT test.dbo.BNAMES.BOOKNO, RTRIM(test.dbo.BNAMES.SRNAME) + '/' + RTRIM(test.dbo.BNAMES.FIRST) + RTRIM(test.dbo.BNAMES.TITLE) 
                          AS PaxName, test.dbo.PNRS.PNR AS Locator, test.dbo.PNRSECTORS.FDATE7, test.dbo.PNRSECTORS.BOARD, test.dbo.PNRSECTORS.ALIGHT, 
                          test.dbo.PNRSECTORS.AIRLINE, test.dbo.PNRSECTORS.FNUMBR, test.dbo.PNRSECTORS.DEP, test.dbo.PNRSECTORS.ARR, test.dbo.BOOKINGS.TOUR, 
                          test.dbo.BOOKINGS.ROUTE, test.dbo.BSTAGES.SEQ,(test.dbo.PNRSECTORS.BOARD + test.dbo.PNRSECTORS.ALIGHT) as both
    FROM         test.dbo.BOOKINGS LEFT OUTER JOIN
                          test.dbo.BNAMES ON test.dbo.BOOKINGS.BOOKNO = test.dbo.BNAMES.BOOKNO LEFT OUTER JOIN
                          test.dbo.BSTAGES ON test.dbo.BNAMES.BOOKNO = test.dbo.BSTAGES.BOOKNO LEFT OUTER JOIN
                          test.dbo.PNRSECTORS ON test.dbo.BSTAGES.SCODE = test.dbo.PNRSECTORS.SKEY LEFT OUTER JOIN
                          test.dbo.PNRS ON test.dbo.PNRSECTORS.PNRKEY = test.dbo.PNRS.PNRKEY
    WHERE     (test.dbo.BSTAGES.STYPE = 3)
    ORDER BY test.dbo.BOOKINGS.BOOKNO, test.dbo.BNAMES.SEQ, locator
    ) t0 
    INNER JOIN (  SELECT     TOUR, ROUTE, OFFSET, SEQ, SCODE, SFROM, STO, (SFROM + STO) AS BOTH
    FROM         test.dbo.TSTAGES    
    ) t1         ON t1.tour = t0.tour and t1.route = t0.route and (t0.both = t1.both)

    union all


    SELECT  distinct    t0.BOO开发者_如何学GoKNO, t0.PaxName, t0.Locator, t0.FDATE7, 
                          t0.BOARD, t0.ALIGHT, t0.AIRLINE, t0.FNUMBR, t0.DEP, 
                          t0.ARR, t0.TOUR, t0.ROUTE,
                           t1.tour, t1.route, t1.sfrom , t1.sto,t1.seq,t0.seq,'YES'
    FROM     
      (   SELECT     TOP (100) PERCENT test.dbo.BNAMES.BOOKNO, RTRIM(test.dbo.BNAMES.SRNAME) + '/' + RTRIM(test.dbo.BNAMES.FIRST) + RTRIM(test.dbo.BNAMES.TITLE) 
                          AS PaxName, test.dbo.PNRS.PNR AS Locator, test.dbo.PNRSECTORS.FDATE7, test.dbo.PNRSECTORS.BOARD, test.dbo.PNRSECTORS.ALIGHT, 
                          test.dbo.PNRSECTORS.AIRLINE, test.dbo.PNRSECTORS.FNUMBR, test.dbo.PNRSECTORS.DEP, test.dbo.PNRSECTORS.ARR, test.dbo.BOOKINGS.TOUR, 
                          test.dbo.BOOKINGS.ROUTE, test.dbo.BSTAGES.SEQ,(test.dbo.PNRSECTORS.BOARD + test.dbo.PNRSECTORS.ALIGHT) as both
    FROM         test.dbo.BOOKINGS LEFT OUTER JOIN
                          test.dbo.BNAMES ON test.dbo.BOOKINGS.BOOKNO = test.dbo.BNAMES.BOOKNO LEFT OUTER JOIN
                          test.dbo.BSTAGES ON test.dbo.BNAMES.BOOKNO = test.dbo.BSTAGES.BOOKNO LEFT OUTER JOIN
                          test.dbo.PNRSECTORS ON test.dbo.BSTAGES.SCODE = test.dbo.PNRSECTORS.SKEY LEFT OUTER JOIN
                          test.dbo.PNRS ON test.dbo.PNRSECTORS.PNRKEY = test.dbo.PNRS.PNRKEY
    WHERE     (test.dbo.BSTAGES.STYPE = 1)
    ORDER BY test.dbo.BOOKINGS.BOOKNO, test.dbo.BNAMES.SEQ, locator
    ) t0 
    INNER JOIN (  SELECT     TOUR, ROUTE, OFFSET, SEQ, SCODE, SFROM, STO, (SFROM + STO) AS BOTH
    FROM         test.dbo.TSTAGES    
    ) t1         ON t1.tour = t0.tour and t1.route = t0.route and t1.seq = t0.seq and (t0.both = t1.both)
    order by bookno 





    END


How about using WITH? You can declare you queries, join them with UNION and them search for the ones not there.

Take a look here: Multiple Select Statements using SQL Server 2005 "WITH" Statement . It should help you get started.

By using WITH statement, you will isolate logic of your queries, making your overall query more understandable.


just wrap your logic around what you wrote:

select bookno 
where key not in (
your big select statement...
)
0

精彩评论

暂无评论...
验证码 换一张
取 消