2017-06-12 2 views
0

Ich habe eine Abfrage, die ich benutze Aussagen zu erzeugen, den Betrag für den Monat zeigt, die auf Datum basierend berechnet wird Parameter- @StartDate und @EndDateWie erhalten Sie @StartDate - 30 in SQL Server 2014?

in der Erklärung enthält, würde Ich mag die Menge hinzuzufügen Aufgrund von der vorherige Monat (Fälligkeit des vorherigen Monats) für einen Datumsbereich @StartDate - 30 bis @EndDate - 30. Welchen Code würde das ausführen?

Mein Code:

set nocount on 

Declare @S AS DateTime = ISNULL(@StartDate,DateAdd(d,-60,GETDATE())) 
Declare @anum as nvarchar(8) = ISNULL(@panum,'25991275') 
Declare @E AS DateTime = ISNULL(@EndDate,DateAdd(d,-0,GETDATE())) 

SELECT A.AccountNumber 
     ,C.FirstName + ' ' + C.LastName CustName 
     ,[InvoiceNumber] 
     ,[StatementDate] 
     ,[NewCharges] 
     ,[AmountDue] 
     ,[Charges] 
     ,[AccountFee] 
     ,[Interest] 
     ,[Payments] 
     ,[Refunds] 
     ,[DueDate] 


FROM [StatementSummary] S 
INNER JOIN Account A ON S.AccountID = A.Accountid 
INNER JOIN Contact C ON A.AccountId = C.AccountId 


WHERE A.AccountNumber = @anum 
    AND StatementDate >= @S 
    AND StatementDate <= @E 

ORDER BY StatementDate DESC 

ich den folgenden Code auszuführen dachte einen anderen Datensatz zu machen:

SELECT Top 1 AcctBalance  
    FROM [FinMaster] 
    WHERE AcctID = @anum 
    AND BusinessDay >= @S - 30 
    AND BusinessDay <= @E - 30 

    ORDER BY AcctBalance DESC 

Wie kann ich hinzufügen, den Datumsbereich, um zurück zum vorherigen Monate?

Wenn ich diesen zweiten Code als Zeile im ersten Code hinzufügen könnte, dann muss ich keinen zweiten Datensatz für meinen Bericht erstellen.

+0

Danke. Wie würde ich das in Code schreiben? – user1777929

+0

Eigentlich sollte OUTER gelten und Eomonth Funktion – maSTAShuFu

Antwort

0

Mit OUTER APPLY und EOMONTH Funktion den letzten Monat Wert
Nur eine Logik zu bekommen und nicht mit Ihren Feldern

declare @reportdate date = getdate() 

select a.*, x.field.... 
from table1 A 
    OUTER apply (  --- to get last month data, can be null.. similar to left outer join but in a cartesian way of display 
    select b.field1, b.field2, b.... 
    from table1 B 
    where 
    b.product_id = a.product_id and 
    trans_date 
    between -- between last month based on the @reportdate 
    dateadd(day,1,eomonth(dateadd(month,-2,@reportdate))) -- or  a.trans_date 
    and 
    eomonth(dateadd(month,-1,@reportdate)) 
    ) x 
where trans_date 
    between -- your reporting date, can be any date 
    dateadd(day,1,eomonth(dateadd(month,-1,@reportdate))) 
    and eomonth(@reportdate)