2013-03-22 30 views
1

我被困在這個很長時間。我不知道爲什麼我的卡表替換爲0。無法取得卡的替換

問我朋友的幫助,他們告訴我這是加入卡表。

QQn:在給定期限內(以包括兩個給定日期爲限),例如2002年12月1日至2003年7月31日,找出在規定的時間內至少有一張EZ連結卡的人。

中的每個人設定,列出

(一)業主身份證,

(II)總數在 期間發表了他/她的卡,

(三)由 擁有者僅限於在給定期間內發行的卡所做的卡替換總數(至當前日期)。

按照業主身份證的升序列出您的結果。例如,人員S1111111具有5張卡片C1(2001年1月2日發行),C2(2002年12月11日發行),C3(2003年7月20日發行,作爲C1的替代版本),C4(7月21日發行)作爲C2的替代物)和C5(2012年8月2日作爲C4的替代物發佈)。

我已經解決了第一部分和第二部分,但無法解決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

什麼構成替換?如果它是'OldCardID IS NOT NULL',那麼你的查詢應該工作。 – 2013-03-22 13:11:45

回答

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 
+0

Hi.Just澄清。爲什麼我甚至需要加入?對不起,我是這個初學者,所以我的qns可能聽起來很愚蠢。 – user2179615 2013-03-22 13:10:56