Reputation: 145
I wrote a SQL query that gets the date range from the current date and passes it to the condition and there returns the output value.
Additionally, I'm getting the last 3-month sales qty from the current date.
So, I want to get the month also within the date range to another column.
Any help?
DECLARE @LastMonthQty Decimal, @LastSecMonthQty Decimal, @LastThrdMonthQty Decimal
DECLARE
@LstMnthStartDate DATETIME = null,
@LstMnthEndDate DATETIME = null
SET @LstMnthStartDate= CAST(DATEADD(DAY,1,EOMONTH(GETDATE(),-2))AS DATE)
SET @LstMnthEndDate =CAST(EOMONTH(GETDATE(),-1) AS DATE)
SET @LastMonthQty= (SELECT SUM (R.Issued_Qty)
FROM LCL_INVN.dbo.LCL_ReqSub R
WHERE R.ItmId=@ItmId AND CAST(R.Issued_Date AS DATE) BETWEEN @LstMnthStartDate AND @LstMnthEndDate AND R.Status=1 )
DECLARE
@LstSecMStartDate DATETIME = null,
@LstSecMEndDate DATETIME = null
SET @LstSecMStartDate= DATEADD(DAY,1,EOMONTH(GETDATE(),-3))
SET @LstSecMEndDate =EOMONTH(GETDATE(),-2)
SET @LastSecMonthQty= (SELECT SUM (R.Issued_Qty)
FROM LCL_INVN.dbo.LCL_ReqSub R
WHERE R.ItmId=@ItmId AND CAST(R.Issued_Date AS DATE) BETWEEN @LstSecMStartDate AND @LstSecMEndDate AND R.Status=1 )
DECLARE
@LstThrMStartDate DATETIME = null,
@LstThrMEndDate DATETIME = null
SET @LstThrMStartDate= DATEADD(DAY,1,EOMONTH(GETDATE(),-4))
SET @LstThrMEndDate =EOMONTH(GETDATE(),-3)
SET @LastThrdMonthQty=(SELECT SUM (R.Issued_Qty)
FROM LCL_INVN.dbo.LCL_ReqSub R
WHERE R.ItmId=@ItmId AND CAST(R.Issued_Date AS DATE) BETWEEN @LstThrMStartDate AND @LstThrMEndDate AND R.Status=1 )
SELECT ISNULL(@LastMonthQty,0) AS LstQty, ISNULL(@LastSecMonthQty,0) AS SecQty, ISNULL(@LastThrdMonthQty,0) AS ThrQty
Upvotes: 3
Views: 119
Reputation: 485
Please refactor your code like this:
--for example -->
--DECLARE @1stDate DATETIME = CAST(GETDATE()-1 AS DATE)
--DECLARE @2stDate DATETIME = CAST(EOMONTH(GETDATE()-1) AS DATE)
SELECT SUM(R.Issued_Qty),R.ItmId,R.Issued_Date
FROM LCL_INVN.dbo.LCL_ReqSub R
GROUP BY R.ItmId,CAST(R.Issued_Date AS DATE)
WHERE CAST(R.Issued_Date AS DATE) IN ('@1stDate','@2ndDate',.....)
AND R.ItmId=@ItmId
, after you can add another month within the date range like bellow:
-- R.xxx_Date is your new month column
SELECT SUM(R.Issued_Qty),R.ItmId,R.Issued_Date,R.xxx_Date
FROM LCL_INVN.dbo.LCL_ReqSub R
GROUP BY R.ItmId,CAST(R.Issued_Date AS DATE),CAST(R.xxx_Date AS DATE)
WHERE CAST(R.Issued_Date AS DATE) IN ('@1stDate','@2ndDate',.....)
AND CAST(R.xxx_Date AS DATE) IN ('@1stDate','@2ndDate',.....)
AND R.ItmId=@ItmId
After that, you can rotate the table! https://learn.microsoft.com/en-us/troubleshoot/sql/database-design/rotate-table better way: https://learn.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15
Upvotes: 1