1

我被困在这个问题上很长时间了。我不知道为什么我的卡表替换一直是0。

问了我朋友的帮助,他们告诉我这与加入牌桌有关。

QQn:对于给定时间段(包括两个给定日期),例如 2002 年 12 月 1 日至 2003 年 7 月 31 日,找出在指定时间段内至少拥有一张 EZ 链接卡的人的集合。

对于集合中的每个人,列出

(i) 所有者身份证,

(ii) 他/她在此期间发行的卡片总数,

(iii) 所有者仅对在给定期间发行的卡进行的换卡总数(截至当前日期)。

按所有者身份证的升序列出您的结果。

例如,人 S1111111 有 5 张卡 C1(2001 年 1 月 2 日发行)、C2(2002 年 12 月 11 日发行)、C3(2003 年 7 月 20 日发行,作为 C1 的替代品)、C4(2003 年 7 月 21 日作为替代品发行)用于 C2)和 C5(于 2012 年 8 月 2 日发布,作为 C4 的替代品)。

我已经解决了第一部分和第二部分,但无法解决第三部分。

这是我的查询:

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

获取此信息的一种方法是使用子查询。子查询通过旧卡 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 回答