我有一张看起来像这样的皮卡表
create table Pickup
(
PickupID int IDENTITY,
ClientID int ,
PickupDate date ,
PickupProxy varchar (200) ,
PickupHispanic bit default 0,
EthnCode varchar(5) ,
CategCode varchar (2) ,
AgencyID int,
Primary Key (PickupID),
);
它包含了客户的皮卡 我需要根据此表创建报告,该报告应如下所示
我知道我需要使用CASE
,但实际上不知道如何计算年限和计算
每年的平均皮卡数。以及如何计算特定年份的皮卡。到目前为止我只有这个
SELECT
DATEPART(YEAR, PickupDate)as 'Month'
FROM dbo.Pickup
group by DATEPART(YEAR, PickupDate)
WITH ROLLUP
有什么想法吗?
答案 0 :(得分:1)
构建这样的查询的最佳方法是使用Index表。理想情况下,在master数据库中创建它,以便服务器上的所有dbs都可以使用它,但也可以在本地db中创建。
您可以创建一个这样的
create table IndexTable
(
IndexID int NOT NULL,
Primary Key (IndexID),
);
然后用数字1 - n填充,其中n足够大,比如1,000,000。
喜欢这个
INSERT IndexTable
VALUES (1)
WHILE (SELECT MAX(IndexID) FROM IndexTable) < 1000000
INSERT IndexTable
SELECT IndexID + (SELECT MAX(IndexID) FROM IndexTable)
FROM IndexTable
您的查询然后使用此表将月份视为整数
SELECT DATEADD(month, 0, i.IndexID) Months
,COUNT(p.PickupDate)
,AVERAGE(*Whatever*)
FROM Pickup p
INNER JOIN
IndexTable i ON DATEDIFF(month, p.PickupDate, 0) = i.IndexID
GROUP BY i.IndexID
WITH ROLLUP