我有在我存储的表Product Name
,它是Renewal Date
与支付计划一起(Monthly/Quarterly/Yearly)
。现在,如果产品的付款方案是Yearly or Monthly
,它将显示获取续订的月份,并显示该Rate/Amount
月份的月结单;但是如果付款方案是产品Monthly
,则应Rate/Amount
在每个月的前面显示,如下所示。
例如,如果一个名为产品ABC
具有的付款计划Yearly
,认购率276
和Renewal Date
2019-12-01
并没有其他产品XYZ
与付费计划Monthly
的申购费率17
和Renewal Date
2019-08-15
然后将结果集我想应该是这样的
ProductName RenewalMonth Rate ------------------------------------ ABC December 276 XYZ January 17 XYZ February 17 XYZ March 17 XYZ April 17 XYZ May 17 XYZ June 17 XYZ July 17 XYZ August 17 XYZ September 17 XYZ October 17 XYZ November 17 XYZ December 17
这是我写的查询,它返回数据库中存在的数据,但不是12月份的月份Product XYZ
。请记住,此付款方式应仅在“付款计划”为所需日期的所有其他月份中显示相同的费率'Monthly'
,对于其他付款计划,它应在数据库中显示给定月份之前的费率。
样本数据如下:
CREATE TABLE ItemDefinition ( ID INT NOT NULL, ProductName VARCHAR(50), PaymentPlan VARCHAR(50), RenewalDate DATETIME, UnitRate NUMERIC(18, 0) ); INSERT INTO ItemDefinition VALUES (1, 'ABC', 'Yearly', '2019-12-01', 276), (1, 'XYZ', 'Monthly', '2019-08-15', 17);
我正在写的查询是
SELECT ProductName, SUM(UnitRate) Rate, DATENAME(MONTH , DATEADD(MONTH , MONTH(RenewalDate)-1 , '1900-01-01')) RenewalMonth FROM ItemDefinition WHERE MONTH(RenewalDate) IS NOT NULL AND RenewalDate BETWEEN @dtStart AND @dtEnd GROUP BY ProductName, MONTH(RenewalDate) ORDER BY MONTH(RenewalDate)