[英]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.