1

我有一个看起来像这样的皮卡表

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

有任何想法吗?

4

1 回答 1

1

构造这样的查询的最佳方法是使用索引表。理想情况下,在您的主数据库中创建它,以便服务器上的所有数据库都可以使用它,但也可以在本地数据库中创建。

你可以像这样创建一个

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
于 2013-03-20T05:22:07.283 回答