1

私はこれで非常に長い間立ち往生しています。カードテーブルの代わりがずっと0である理由がわかりません。

友達に助けを求めたところ、カードテーブルに参加することと関係があると言われました。

QQn:指定された期間(2つの指定された日付を含む)、たとえば2002年12月1日から2003年7月31日まで、指定された期間内に少なくとも1枚のEZリンクカードを発行した人のセットを見つけます。

セット内の各人について、リストします

(i)所有者NRIC、

(ii)期間中に発行された彼/彼女のカードの総数、

(iii)所定の期間中に発行されたカードについてのみ、所有者によって行われたカード交換の総数(現在の日付まで)。

オーナーNRICの昇順で結果を一覧表示します。

たとえば、人物S1111111には、C1(2001年1月2日に発行)、C2(2002年12月11日に発行)、C3(2003年7月20日にC1の代わりに発行)、C4(2003年7月21日に代わりに発行)の5枚のカードがあります。 C2の場合)、およびC5(C4の代わりとして2012年8月2日に発行)。

パートiとiiを解決しましたが、iiiを解決できません。

これが私の質問です:

create table card
(
CardID  int not null primary key,
OwnerNRIC   char(9),
IssuedDcardate  date,
StoredValue decimal (5,2),
OldCardID   int,
constraint card_fk foreign key (OldCardID) references card(CardID)
);


SELECT ownerNRIC AS NRIC,
  COUNT(ownerNRIC) AS Total_Cards_Issued_during_Period,
  COUNT(OldCardID) AS Total_Replacement_till_date_for_cards_issued_during_Period
FROM card

WHERE IssuedDcardate BETWEEN '2002-12-01' AND '2003-07-31' 
GROUP BY ownerNRIC;
4

1 に答える 1

0

この情報を取得する 1 つの方法は、サブクエリを使用することです。サブクエリは、古いカード ID によって情報を要約し、それを再び結合します。

select ownerNRIC AS NRIC,
       COUNT(ownerNRIC) AS Total_Cards_Issued_during_Period,
       NumNewCards
from card c left outer join
     (select oldcardid, count(*) as numNewCards
      from card
      group by oldcardid
     ) oc
     on oc.oldcardId = c.cardid
WHERE IssuedDcardate BETWEEN '2002-12-01' AND '2003-07-31' 
group by ownerNRIC
于 2013-03-22T13:09:40.837 に答える