0

2 か月以上集荷しなかったクライアントを示すステートメントを作成しようとしています。すでに更新手順があり、必要に応じて機能します。

update Clients
set StatusID=4
from (SELECT P.ClientID, MAX(p.PickupDate) MaxPickupDate
      FROM Pickup P
      group by P.Clientid) P
     join Clients C on P.ClientID= C.ClientID
where   C.StatusID in (1, 2)and C.WIC=0
      AND P.MaxPickupDate<DATEADD(month,-2,GETDATE());

私は他の選択を持っています

select P.ClientID
   ,LastName+' '+FirstName as Name 
   ,Address
   ,max(p.PickupDate)
from Pickup P
join Clients C on P.ClientID= C.ClientID
where max(p.PickupDate)<DATEADD(month,-2,GETDATE())
group by p.clientid, lastname + ' ' + firstname,address

2か月以上集荷を行わなかったクライアントのみを表示するはずでしたが、エラーが発生しました

集計は、HAVING 句または選択リストに含まれるサブクエリ内になく、集計される列が外部参照でない限り、WHERE 句に表示されない場合があります。

この行が気に入らないよう where max(p.PickupDate)<DATEADD(month,-2,GETDATE())です この問題を解決する方法はありますか?

4

1 に答える 1

1

集計の前ではなく、完了後にロジックを適用する必要があるため、WHERE の代わりに HAVING を使用します。

select P.ClientID
   ,LastName+' '+FirstName as Name 
   ,Address
   ,max(p.PickupDate)
from Pickup P
join Clients C on P.ClientID= C.ClientID
group by p.clientid, lastname + ' ' + firstname,address
HAVING max(p.PickupDate)<DATEADD(month,-2,GETDATE())
于 2013-03-17T23:57:28.447 に答える