I've looked through several previous questions but I am struggling to apply the solutions to my specific example.
I am having trouble combining query 1 and query 2.
My query originally returned (amongst other details) the values " SpentTotal " and " UnderSpent " for all members/users for the current month.
My issue has been adding two additional columns to this original quert that will return JUST these two columns (Spent and Overspent) but for the previous months data
Original Query #1:
set @BPlanKey = '##CURRENTMONTH##'
EXECUTE @RC = Minimum_UpdateForPeriod @BPlanKey
SELECT cm.clubaccountnumber, bp.Description , msh.PeriodMinObligation, msh.SpentTotal, msh.UnderSpent, msh.OverSpent, msh.BilledDate, msh.PeriodStartDate, msh.PeriodEndDate, msh.OverSpent
FROM MinimumSpendHistory msh
INNER JOIN BillPlanMinimums bpm ON msh.BillingPeriodKey = @BPlanKey and bpm.BillPlanMinimumKey = msh.BillPlanMinimumKey
INNER JOIN BillPlans bp ON bp.BillPlanKey = bpm.BillPlanKey
INNER JOIN ClubMembers cm ON cm.parentmemberkey is null and cm.ClubMemberKey = msh.ClubMemberKey
order by cm.clubaccountnumber asc, msh.BilledDate asc
Query #2, query of all columns for PREVIOUS month, but I only need two (spent and over spent), added to the query from above, joined on the customer number:
set @BPlanKeyLastMo = '##PREVMONTH##'
EXECUTE @RCLastMo = Minimum_UpdateForPeriod @BPlanKeyLastMo
SELECT cm.clubaccountnumber, bp.Description , msh.PeriodMinObligation, msh.SpentTotal, msh.UnderSpent, msh.OverSpent, msh.BilledDate, msh.PeriodStartDate, msh.PeriodEndDate, msh.OverSpent
FROM MinimumSpendHistory msh
INNER JOIN BillPlanMinimums bpm ON msh.BillingPeriodKey = @BPlanKeyLastMo and bpm.BillPlanMinimumKey = msh.BillPlanMinimumKey
INNER JOIN BillPlans bp ON bp.BillPlanKey = bpm.BillPlanKey
INNER JOIN ClubMembers cm ON cm.parentmemberkey is null and cm.ClubMemberKey = msh.ClubMemberKey
order by cm.clubaccountnumber asc, msh.BilledDate asc
Big thank you to any and all that are willing to lend their help and time.
Cheers!
CREATE TABLE MinimumSpendHistory(
[MinimumSpendHistoryKey] [uniqueidentifier] NOT NULL,
[BillPlanMinimumKey] [uniqueidentifier] NOT NULL,
[ClubMemberKey] [uniqueidentifier] NOT NULL,
[BillingPeriodKey] [uniqueidentifier] NOT NULL,
[PeriodStartDate] [datetime] NOT NULL,
[PeriodEndDate] [datetime] NOT NULL,
[PeriodMinObligation] [money] NOT NULL,
[SpentTotal] [money] NOT NULL,
[CurrentSpent] [money] NOT NULL,
[OverSpent] [money] NULL,
[UnderSpent] [money] NULL,
[BilledAmount] [money] NOT NULL,
[BilledDate] [datetime] NOT NULL,
[PriorPeriodMinimum] [money] NULL,
[IsCommitted] [bit] NOT NULL,
[IsCalculated] [bit] NOT NULL,
[BillPeriodMinimumKey] [uniqueidentifier] NOT NULL,
[CarryForwardCounter] [smallint] NULL,
[YTDSpent] [money] NOT NULL,
[PeriodToAccumulateCounter] [int] NULL,
[StartDate] [datetime] NOT NULL,
SELECT cm.clubaccountnumber, bp.Description , msh.PeriodMinObligation, msh.SpentTotal, msh.UnderSpent, msh.OverSpent, msh.BilledDate, msh.PeriodStartDate, msh.PeriodEndDate,
mshp.SpentTotal, mshp.UnderSpent
FROM MinimumSpendHistory msh
INNER JOIN BillPlanMinimums bpm ON msh.BillingPeriodKey = @BPlanKey
and bpm.BillPlanMinimumKey = msh.BillPlanMinimumKey
INNER JOIN BillPlans bp ON bp.BillPlanKey = bpm.BillPlanKey
INNER JOIN ClubMembers cm ON cm.parentmemberkey is null
and cm.ClubMemberKey = msh.ClubMemberKey
LEFT OUTER JOIN ClubMembers cmp on cm.ClubMemberKey = msh.ClubMemberKey
LEFT OUTER JOIN MinimumSpendHistory mshp on cmp.ClubMemberKey = mshp.ClubMemberKey
and mshp mshp.BillingPeriodKey = @BPlanKeyLastMo
order by cm.clubaccountnumber asc, msh.BilledDate asc
There are almost certainly more straightforward ways of doing it, but this will probably work:
If ClubAccountNumber isn't unique on ClubMembers you'll need to select the primary key of this table too and join the two subselects on that instead.
Select
a.ClubAccountNumber,
a.Description,
a.PeriodMinObligation,
a.SpentTotal,
a.UnderSpent,
a.OverSpent,
a.BilledDate,
a.PeriodStartDate,
a.PeriodEndDate,
a.OverSpent, -- this second instance of overspent is from the question...
b.SpentTotal As LastMonthSpentTotal,
b.UnderSpent As LastMonthUnderspent
From (
Select
cm.ClubAccountNumber,
bp.Description,
msh.PeriodMinObligation,
msh.SpentTotal,
msh.UnderSpent,
msh.OverSpent,
msh.BilledDate,
msh.PeriodStartDate,
msh.PeriodEndDate
From
MinimumSpendHistory msh
Inner Join
BillPlanMinimums bpm
On msh.BillingPeriodKey = @BPlanKey And bpm.BillPlanMinimumKey = msh.BillPlanMinimumKey
Inner Join
BillPlans bp
On bp.BillPlanKey = bpm.BillPlanKey
Inner Join
ClubMembers cm
On cm.ParentMemberKey Is Null And cm.ClubMemberKey = msh.ClubMemberKey
) a Left Outer Join (
Select
cm.ClubAccountNumber,
msh.SpentTotal,
msh.UnderSpent
From
MinimumSpendHistory msh
Inner Join
BillPlanMinimums bpm
On msh.BillingPeriodKey = @BPlanKeyLastMo and bpm.BillPlanMinimumKey = msh.BillPlanMinimumKey
Inner Join
BillPlans bp
On bp.BillPlanKey = bpm.BillPlanKey
Inner Join
ClubMembers cm
On cm.ParentMemberKey Is Null And cm.ClubMemberKey = msh.ClubMemberKey
) b On a.ClubAccountNumber = b.ClubAccountNumber -- this should probably join on cm.clubmemberkey, but we are guessing
Order By
a.ClubAccountNumber,
a.BilledDate
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.