2015-04-02 28 views
0

我有一個表的客戶:填寫其餘類別SQL

UserId Name Amount 
1  AA  1 
1  BB  1 
1  CC  1 
1  DD  1 
2  AA  1 
2  BB  1 
2  CC  1 
3  AA  1 
3  CC  1 

,我需要選擇在那裏,我看到每個用戶ID每個名稱(AA,BB,CC,DD) - 如果他不有記錄與上表中的名字,我想以0太補量因此,對於給定的例子的結果應該是:

UserId Name Amount 
1  AA  1 
1  BB  1 
1  CC  1 
1  DD  1 
2  AA  1 
2  BB  1 
2  CC  1 
2  DD  0 
3  AA  1 
3  BB  0 
3  CC  1 
3  DD  0 

我不認爲我可以做到這一點"case when..."所以也許有些加入上表只它的所有名字..?感謝您的幫助

+0

「上表的連接,只有所有的名字」,是的! – jarlh 2015-04-02 10:18:32

回答

3

想想這個分兩步走。首先獲取所有行,然後填寫值。第一部分使用cross join。第二個可以用left join(或相關子查詢)來完成:

select u.userid, n.name, coalesce(.amount, 0) as amount 
from (select distinct userid from customer) u cross join 
    (select distinct name from customer) n left join 
    customer c 
    on c.userid = u.userid and c.name = n.name; 
2

你可以試試這個

SELECT B.UserId, A.Name, ISNULL(C.Amount,0) Amount 
FROM 
(SELECT DISTINCT Name FROM TEMP) A 
CROSS JOIN 
(SELECT DISTINCT USERID FROM TEMP) B 
LEFT JOIN TEMP C ON B.USERID = C.USERID AND A.NAME = C.NAME 
ORDER BY B.USERID, A.NAME