我被困在这很长时间了。我不知道为什么我替换卡表一直是0。
询问我朋友的帮助,他们告诉我这与加入卡片表有关。
QQn:在特定时期内(以两个特定日期为界),比如2002年12月1日至2003年7月31日,找到在指定时间内至少发出一张EZ链接卡的人。对于集合中的每个人,列出
(i)所有者NRIC,
(ii)期间签发的卡片总数 期间,
(iii)由卡片更换的卡片总数(截至当前日期) 只有那些在给定时期内发行的卡的所有者。
按照所有者身份的升序列出您的结果。
例如,人S1111111有5张卡C1(2001年1月2日发行),C2(2002年12月11日发行),C3(2003年7月20日发行,作为C1的替代品),C4(7月21日发行) 2003年作为替代C2)和C5(2012年8月2日发布,作为C4的替代品)。
我已经解决了部分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;
答案 0 :(得分: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