簡體   English   中英

在一個SQL Server 2000中聯接兩個表

[英]Join two tables in one SQL Server 2000

我對此查詢感到困惑,從兩個查詢中得到以下結果:

查詢1:

SELECT convert(varchar(10), date_creat, 101) as DateCreate, count(distinct packslip) as OrdersPendingPickUp
FROM pickhead
WHERE procstep = '17'
GROUP BY convert(varchar(10), date_creat, 101)
ORDER BY convert(varchar(10), date_creat, 101)

結果查詢1:

DateCreate  OrdersPendingPickUp
2/11/2013   1
2/19/2013   1
2/21/2013   3
2/25/2013   1
2/26/2013   11
2/27/2013   6

查詢2:

SELECT convert(varchar(10), DateCreate, 101) as DateCreate, count(distinct PackSlip) as OrdersPendingInvoice
FROM tblB2B_Orders [to]
INNER JOIN tblTmpLsrType ttlt ON [to].LSRNbr = ttlt.shpno
WHERE 
    [to].PackSlip not in (SELECT PackSlip FROM pickhead)
    AND (ttlt.InvcNbr = '' OR ttlt.InvcNbr is null) 
GROUP BY convert(varchar(10), DateCreate, 101)
ORDER BY convert(varchar(10), DateCreate, 101)

結果查詢2:

DateCreate  OrdersPendingInvoice
2/25/2013   1
2/26/2013   1

現在,我要將兩個結果合並為一個,結果應如下所示:

DateCreate  OrdersPendingPickUp OrdersPendingInvoice
2/11/2013   1                     0
2/19/2013   1                     0
2/21/2013   3                     0
2/25/2013   1                     1
2/26/2013   11                    1
2/27/2013   6                     0

我做了以下工作,但無法正常工作:

SELECT DISTINCT convert(varchar(10), DateCreate, 101) as DateCreate,
    isnull(
        (SELECT count(distinct packslip)
        FROM pickhead
        WHERE procstep = '17' AND (convert(varchar(10), [to].DateCreate, 101) = convert(varchar(10), date_creat, 101))
        GROUP BY convert(varchar(10), date_creat, 101)),0       
    ) as OrdersPendingPickUp,
    isnull(
        (SELECT count(distinct [to1].PackSlip)
        FROM tblB2B_Orders [to1]
        INNER JOIN tblTmpLsrType ttlt ON [to1].LSRNbr = ttlt.shpno
        WHERE 
            [to1].PackSlip not in (SELECT PackSlip FROM pickhead) 
            AND (ttlt.InvcNbr = '' OR ttlt.InvcNbr is null)
            AND [to1].DateCreate = [to].DateCreate
        GROUP BY convert(varchar(10), [to1].DateCreate, 101)),0 
    ) as OrdersPendingInvoice
FROM tblB2B_Orders [to]
ORDER BY convert(varchar(10), DateCreate, 101)

結果如下:

DateCreate  OrdersPendingPickUp OrdersPendingInvoice
2/11/2013   1                     0
2/19/2013   1                     0
2/20/2013   0                     0
2/21/2013   3                     0
2/25/2013   1                     0
2/25/2013   1                     1
2/26/2013   11                    0
2/26/2013   11                    1
2/27/2013   6                     0

任何幫助將不勝感激。

使用完全外部聯接很容易做到這一點:

with query1 as (<query1>),
     query2 as (<query2>)
select coalesce(query1.dateCreate, query2.dateCreate) as DateCreate,
       coalesce(query2.OrdersPendingPickup, 0.0) as OrdersPendingPickup,
       coalesce(query1.OrdersPendingInvoice, 0.0) as OrdersPendingInvoice
from query1
     full outer join
     query2
     on query1.datecreate = query2.datecreated

請注意,您的查詢進入with子句。

您可以對子查詢執行相同的操作:

select coalesce(query1.dateCreate, query2.dateCreate) as DateCreate,
       coalesce(query2.OrdersPendingPickup, 0.0) as OrdersPendingPickup,
       coalesce(query1.OrdersPendingInvoice, 0.0) as OrdersPendingInvoice
from (<YOUR QUERY 1 GOES HERE>) query1
     full outer join
     (<YOUR QUERY 2 GOES HERE>) query2
     on query1.datecreate = query2.datecreated

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM