2013-06-03 12 views
8

2つのクエリを結合したストアドプロシージャがあります。私のクエリはストアドプロシージャで2つのクエリを結合して1つの行に結果を得る方法

-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

-- Insert statements for procedure here 
(Select count(quoteid) as TotalQuote, sum(totalamount) as QuoteAmount from dbo.QuoteBase 
where CreatedOn BETWEEN @SDate AND @EDate) 
union All 

(select count(salesorderid)as TotalOrders, sum(totalamount) as OrderAmount from dbo.SalesOrderBase Where 
CreatedOn BETWEEN @SDate AND @EDate) 

として

alter PROCEDURE test 

@SDate datetime, 
@EDate datetime 

であり、私は列

Total Quote Quote Amount 
17     700 
118     5000 

にになりましたが、私は共有してください誰もがアイデアを持っている場合は

Total Quote Quote Amount Total Orders Order Amount 
    17    700    118   5000 

のようになりたいです私と一緒に

答えて

5

は試してみてください、この1 -

ALTER PROCEDURE dbo.usp_test 

     @SDate DATETIME 
    , @EDate DATETIME 

AS BEGIN 

    SET NOCOUNT ON; 

    SELECT 
      t.TotalQuote 
     , t.QuoteAmount 
     , t2.TotalOrders 
     , t2.OrderAmount 
    FROM (SELECT a = 1) a 
    CROSS JOIN (
     SELECT 
       TotalQuote = COUNT(quoteid) 
      , QuoteAmount = SUM(totalamount) 
     FROM dbo.QuoteBase 
     WHERE CreatedOn BETWEEN @SDate AND @EDate 
    ) t 
    CROSS JOIN (
     SELECT 
       TotalOrders = COUNT(salesorderid) 
      , OrderAmount = SUM(totalamount) 
     FROM dbo.SalesOrderBase 
     WHERE CreatedOn BETWEEN @SDate AND @EDate 
    ) t2 

END 

更新: `(SELECTについて

SELECT 
     t.TotalQuote 
    , t.QuoteAmount 
    , t2.TotalOrders 
    , t2.OrderAmount 
FROM (
    SELECT 
      TotalQuote = COUNT(quoteid) 
     , QuoteAmount = SUM(totalamount) 
    FROM dbo.QuoteBase 
    WHERE CreatedOn BETWEEN @SDate AND @EDate 
) t 
FULL OUTER JOIN 
(
    SELECT 
      TotalOrders = COUNT(salesorderid) 
     , OrderAmount = SUM(totalamount) 
    FROM dbo.SalesOrderBase 
    WHERE CreatedOn BETWEEN @SDate AND @EDate 
) t2 ON 1 = 1 
+0

必要がありません= 1)a? – Andomar

+1

'group by 'を指定せずに' count'を使うと、テーブルが空であっても常に1行戻ってくるでしょう。 – Andomar

+0

@Andomar、ありがとうございます。 – Devart

4

あなたはcross join代わりunionで使用することができます

select q1.TotalQuote 
,  q1.QuoteAmount 
,  q2.TotalOrders 
,  q2.OrderAmount 
from (
     ... first query ... 
     ) q1 
cross join 
     (
     ... second query ... 
     ) q2 
関連する問題