-2

こんにちは、ピックアップテーブルからのピックアップを月ごとにカウントする選択を作成しようとしています。Select は、.NET で記述された Web サイトで使用されます。
レポートは次のようになります 私が作成しようとしているpfレポートの例

私は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  )

選択は完了していないため、おそらく書き直す必要がありますが、方法がわかりません:(エラーがスローされます

メッセージ 512、レベル 16、状態 1、行 1
サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

また、問題は、現在の年のピックアップテーブルのレコードをステートメントで確認する方法がわからないことです。Web サイトを使用する人は select で日付を変更できないと思うので :) また、何らかの理由で関数 AVG は正確な平均を計算せず、グループごとに実行したくありません。助けてください!

4

2 に答える 2

2

平均がどのように計算されると予想されるかについて十分な詳細を提供していませんが、残りは次のように計算できます。

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 年) がパラメーターとして提供されます。レポートで参照AgencyId を実行するか、派生テーブルで上記のクエリを使用してテーブルに結合する必要があります。AgencyNameAgency

于 2013-03-10T03:49:40.063 に答える
-1
Alter procedure sp_CountPickups
 @MyYear int
AS
SELECT
MAX(a.AgencyName),
COUNT(PickupID) as YearTotal,
COUNT(PickupID)/(CASE WHEN YEAR(GETDATE()) =@myYear 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

誰かの役に立つかもしれない

于 2013-03-10T05:14:45.100 に答える