2013-07-24 5 views
1

У меня есть хранимая процедура и запрос диапазона дат. Я хочу присоединиться к запросам, которые показывают только один набор результатов. Порядок и запроса приведены ниже ..Как присоединиться к двум различным запросам в SQL Server

CREATE PROCEDURE ak_ReportData_CMTDB 

    @BankAccountID uniqueidentifier, 
    @StartDate  datetime, 
    @EndDate  datetime 

AS 

---------------------------------------------------------------------------- 
-- Name:  ak_ReportData_CMTDB 
-- Purpose: Returns the daily activity on the passed bank account for the 
--   passed date range 
-- Input: BankAccountID - The bank account to report on 
--   StartDate, EndDate - The date range to report on 
-- Output: Recordset containing activity 
-- Return: 0 = Sucess 
--   >0 = Error 
---------------------------------------------------------------------------- 

SET NOCOUNT ON 

DECLARE @OpeningBalance money 

-- Calculate opening balance for deposits 
SELECT NULL AS fDepositDate, 
     SUM(CASE fType 
      WHEN 0 THEN fAmount     -- Deposit (Add amount) 
      WHEN 1 THEN (CASE fSide 
          WHEN 1 THEN fAmount * -1 -- Transfer Out (Subtract amount) 
          WHEN 2 THEN fAmount  -- Transfer In (Add amount) 
           ELSE 0 
         END) 
      WHEN 2 THEN fAmount     -- Credit Card (Add amount) 
      WHEN 3 THEN fAmount * -1    -- Withdrawal (Subtract amount) 
        ELSE 0 
      END) As fNetChange 
FROM tBADepositMaster 
WHERE fBankAccountID = @BankAccountID 
    AND fDepositDate < @StartDate 
    AND fVoid = 0 

UNION ALL 

-- Calculate NetChange for deposits for each date 
SELECT fDepositDate, 
     SUM(CASE fType 
      WHEN 0 THEN fAmount     -- Deposit (Add amount) 
      WHEN 1 THEN (CASE fSide 
          WHEN 1 THEN fAmount * -1 -- Transfer Out (Subtract amount) 
          WHEN 2 THEN fAmount  -- Transfer In (Add amount) 
           ELSE 0 
         END) 
      WHEN 2 THEN fAmount     -- Credit Card (Add amount) 
      WHEN 3 THEN fAmount * -1    -- Withdrawal (Subtract amount) 
        ELSE 0 
      END) AS fNetChange 
FROM tBADepositMaster 
WHERE fBankAccountID = @BankAccountID 
    AND fDepositDate BETWEEN @StartDate AND @EndDate 
    AND fVoid = 0 
GROUP BY fDepositDate 

UNION ALL 

-- Calculate opening balance for checks 
SELECT NULL As fDepositDate, 
     SUM(fAmount) * -1 AS fNetChange 
FROM tBACheck 
WHERE fBankAccountID = @BankAccountID 
    AND fDate < @StartDate 
    AND fVoid = 0 

UNION ALL 

-- Calculate NetChange for checks for each date 
SELECT fDate As fDepositDate, 
     SUM(fAmount) * -1 AS fNetChange 
FROM tBACheck 
WHERE fBankAccountID = @BankAccountID 
    AND fDate BETWEEN @StartDate AND @EndDate 
    AND fVoid = 0 
GROUP BY fDate 
ORDER BY fDepositDate 

И получить диапазон дат запроса

;WITH tmpinfo(tmpdt) AS 
(SELECT @StartDate 
UNION ALL 
SELECT tmpdt + 1 
FROM tmpinfo 
WHERE tmpdt < @EndDate) 
SELECT * FROM tmpinfo OPTION (MAXRECURSION 0); 

Можно ли соединить эти два запроса в одном запросе?

+0

Я хочу получить все даты между StartDate и EndDate с записью первой хранимой процедуры. –

ответ

0

По одному набору результатов вы хотите добавить второй результат запроса в качестве дополнительного столбца в первый запрос. Если да, то вы можете использовать объединение для объединения обоих запросов с общими столбцами.

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