我有一些问题,我希望能够从您那里了解如何做到这一点。
create table test
(
Costumer VARCHAR(10) NOT NULL,
Order_No VARCHAR(10) NOT NULL,
Season VARCHAR(10) NOT NULL,
MinDate datetime NOT NULL,
Orders numeric(10) NOT NULL
);
INSERT INTO test
(Costumer,Order_No,Season,MInDate,Orders)
VALUES
(444,'1234','161','2016-11-12 20:32:41.210',10),
(444,'4514','161','2016-11-12 20:32:41.210',10),
(444,'2451','161','2017-04-21 20:37:04.827',10),
(555,'3222','161','2016-11-30 20:32:41.210',10),
(555,'2333','161','2016-12-05 20:32:41.210',10),
(555,'4588','161','2017-04-21 20:37:04.827',10),
(666,'4577','161','2016-09-12 20:32:41.210',10),
(666,'4784','161','2016-10-15 20:32:41.210',10),
(888,'4254','161','2016-09-01 20:32:41.210',10),
(888,'2987','161','2016-09-10 20:32:41.210',10),
(888,'2999','161','2017-01-12 20:32:41.210',10),
(321,'1234','162','2016-11-12 20:32:41.210',10),
(321,'4514','162','2016-11-12 20:32:41.210',10),
(321,'2451','162','2017-04-21 20:37:04.827',10),
(565,'3222','162','2016-11-30 20:32:41.210',10),
(565,'2333','162','2016-12-05 20:32:41.210',10),
(565,'4588','162','2017-04-21 20:37:04.827',10),
(777,'4577','162','2016-09-12 20:32:41.210',10),
(777,'4784','162','2016-10-15 20:32:41.210',10),
(111,'4254','162','2016-09-01 20:32:41.210',10),
(111,'2987','162','2016-09-10 20:32:41.210',10),
(111,'2999','162','2017-01-12 20:32:41.210',10) ;
所以我以此表为例。 列是客户,订单号,季节,订单日期,订单号和订单数量。
我想做什么:
基本上我已经有一张表用于SSRS报告。在报告中,我需要添加一个过滤器来显示或不显示从该季节该客户的第一个订单开始45天后的订单。 从上面的示例中,当我打开过滤器时,我需要查看qty的总和,仅用于那个没有从该季节的第一个订单传递45天的订单。
如果第一个客户的过滤器已开启,我需要结果:
客户季节日期总和(数量)
每个客户的输出必须是一行。
例如:
Filter on:
444 161 2016-11-12 20:32:41.210 20
Filter off:
444 161 2016-11-12 20:32:41.210 30
我尝试了一些代码但是没有为我工作。实际上我需要客户,而不是季节,然后是客户和季节的第一个日期,然后是数量的总和(与45天报告者相关)
我希望你明白这个主意。提前谢谢。
答案 0 :(得分:1)
如果我理解你的问题......这可能会对你有所帮助:
declare @filter bit
if (@filter = 1)
begin
declare @temp table(Costumer VARCHAR(10) NOT NULL,
Season VARCHAR(10) NOT NULL,
MinDate datetime NOT NULL)
insert into @temp
select Costumer, Season, min(MinDate)
from test
group by Costumer, Season
select t1.Costumer, t1.Season, min(t.Mindate), sum(t.Orders) as qty
from test t
inner join @temp t1 on t1.costumer=t.costumer and t1.season = t.season and t1.MinDate=t.MinDate
where datediff(d, t1.MinDate, getdate())>45
group by t1.Costumer, t1.Season
end
else
begin
select t.Costumer, t.Season, min(t.Mindate), sum(t.Orders) as qty
from test t
group by t.Costumer, t.Season
end