2013-02-27 4 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 окр, но не понимал, что БД в SQL Server 2000. Вот почему я получил ошибка с 'with' – Somebody

+0

Гордон, который работал потрясающе !, оба из них. Большое спасибо :) – Somebody

Смежные вопросы