2013-03-10 68 views
-2

嗨我想创建选择哪个将从皮卡表计数皮卡按月。 Select将用于在.NET上编写的网站。
报告将看起来像这样 example pf report which i am trying to create 选择语句与计数月

我有3个表

create table Agency 
    (
    AgencyID int not null IDENTITY, 
    AgencyName varchar (100)not null, 
    CeresNo VARCHAR(7), 
    AgencyCode varchar (16) not null, 
    Active bit,  
    CensusDist varchar(50) ,  
    GroupCode varchar (10),  
    Primary Key (AgencyID),  
    FOREIGN KEY (CensusDist) REFERENCES AgencyCensus(CensusDist),  
    FOREIGN KEY (GroupCode) REFERENCES AgencyGroup (GroupCode) 
    ); 

客户表

create table Clients 
    (
    ClientID int not null IDENTITY (9000,1), 
    AgencyID int not null, 
    AppDate date not null, 
    CertifiedDate date , 
    Primary Key (ClientID), 
    FOREIGN KEY (AgencyID) REFERENCES Agency(AgencyID), 
    ); 

和皮卡表

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), 
FOREIGN KEY (ClientID) REFERENCES Clients (ClientID) 
); 

所以到目前为止,我有这个说法

select 
[Agency]= (select AgencyName from agency), 
[Jan] = (select count(pickupid) from pickup where PickupDate between '2012-01-01' and '2012-01-31' group by AgencyID), 
[FEB] = (select count(pickupid) from pickup where PickupDate between '2012-02-01' and '2012-02-29' group by AgencyID ) 

的选择还没有完成,而且也应该rewrited但我不知道怎么:( 它引发错误

消息512,级别16,状态1,行
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。

另外的问题是我不知道如何使声明看当前皮卡表中的记录。因为我认为那些使用网站的人将无法在选择时更改日期:)同样由于某种原因,功能AVG不会计算正确的平均值,也不希望按组进行计算。请帮忙!

+0

有用的,如果你创建一个[SQLFiddle(http://sqlfiddle.com)一些示例数据,你可能会得到答案更快。 – 2013-03-10 04:00:02

+0

我不明白它是如何工作:) – Andrey 2013-03-10 04:10:24

+0

SQLFiddle不明白:)有没有甚至帮助页面:) – Andrey 2013-03-10 04:14:29

回答

-1
Alter procedure sp_CountPickups 
@MyYear int 
AS 
SELECT 
MAX(a.AgencyName), 
COUNT(PickupID) as YearTotal, 
COUNT(PickupID)/(CASE WHEN YEAR(GETDATE()) [email protected] THEN MONTH(GETDATE()) ELSE 12 END) as MoAvg, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 1 THEN 1 ELSE 0 end) as Jan, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 2 THEN 1 ELSE 0 end) as Feb, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 3 THEN 1 ELSE 0 end) as Mar, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 4 THEN 1 ELSE 0 end) as Apr, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 5 THEN 1 ELSE 0 end) as May, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 6 THEN 1 ELSE 0 end) as Jun, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 7 THEN 1 ELSE 0 end) as Jul, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 8 THEN 1 ELSE 0 end) as Aug, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 9 THEN 1 ELSE 0 end) as Sep, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 10 THEN 1 ELSE 0 end) as Oct, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 11 THEN 1 ELSE 0 end) as Nov, 
SUM(CASE WHEN DATEPART(month, PickupDate) = 12 THEN 1 ELSE 0 end) as Dec 
FROM dbo.Pickup p join Agency a on p.agencyid = a.agencyid 
where DATEPART(year, PickupDate) = @MyYear 
group by a.AgencyID 
order by a.AgencyID 

可能会为某人

2

你还没有给你如何期望平均要calaculated,但可以计算出其余如下足够的细节:

SELECT 
    COUNT(PickupID) as YearTotal, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 1 THEN 1 ELSE 0 end) as Jan, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 2 THEN 1 ELSE 0 end) as Feb, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 3 THEN 1 ELSE 0 end) as Mar, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 4 THEN 1 ELSE 0 end) as Apr,    
    SUM(CASE WHEN DATEPART(month, PickupDate) = 5 THEN 1 ELSE 0 end) as May, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 6 THEN 1 ELSE 0 end) as Jun, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 7 THEN 1 ELSE 0 end) as Jul, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 8 THEN 1 ELSE 0 end) as Aug, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 9 THEN 1 ELSE 0 end) as Sep, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 10 THEN 1 ELSE 0 end) as Oct, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 11 THEN 1 ELSE 0 end) as Nov, 
    SUM(CASE WHEN DATEPART(month, PickupDate) = 12 THEN 1 ELSE 0 end) as Dec   
FROM dbo.Pickup 
where DATEPART(year, PickupDate) = 2012 
group by AgencyID 

凡在该年度(2012年在这里)作为参数提供。您将需要在报告上执行AgencyIdAgencyName的查找,在dervived表中使用上述查询并将其加入Agency表。

+0

Thanx!据我了解MoAVG的要求,它将Yeartotal分为12,并且最接近全部数字。也没有得到如何显示AgencyNAme,因为这两个表没有直接关系,他们连接到对方槽客户表。那意味着我需要添加3个表Join? – Andrey 2013-03-10 04:25:38

+0

“也没有得到如何显示AgencyNAme,因为这两个表没有直接关系,他们连接到对方低谷客户表” - 这不是你的模式定义所暗示的。 – 2013-03-10 04:27:44

+0

皮卡表有这个字段'AgencyID',但它不是FOREIGN键,或者我仍然可以通过同一字段连接它们?因为在大学他们教我们,我们只能通过FOREIGN或主键连接表。 – Andrey 2013-03-10 04:32:54