2013-02-27 117 views
0

我堅持用這個查詢,我有兩個查詢的結果如下:加入一個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 

任何幫助將不勝感激。

回答

1

這是很容易用全外進行連接:

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 
+0

對不起戈登我在SQL Server 2005中的env工作,但並沒有意識到,DB是SQL Server 2000這就是爲什麼我得到了一個錯誤與'與' – Somebody 2013-02-27 16:48:35

+0

戈登,工作真棒!,他們倆。萬分感謝 :) – Somebody 2013-02-27 17:03:51