資料JOIN連結問題 |
答題得分者是:jackiemi2_seed
|
tee101984
一般會員 發表:3 回覆:2 積分:1 註冊:2009-06-28 發送簡訊給我 |
請教各位前輩,目前我遇到一個問題是我要計算應完成的事件總數以及已完成總數,並且將完成度用百分比顯現,但因為資料是透過多層連結才知道詳細情況,雖然下面的程式碼可以顯現出來我要的結果,但是如果BBB的全部資料裡的Sheets.Status都沒有已完成的(3是完成的代碼),會變成沒有資料顯現出來....有前輩可以指點一下迷津嗎?
[code sql] select AAA.sname,CT,CT2,convert(varchar, CT2 / convert(float,CT)*100) '%' as completion from (SELECT dbo.SS.sname, count(*) as CT FROM dbo.SS INNER JOIN dbo.P_S ON dbo.SS.S_No = dbo.P_S.S_No INNER JOIN dbo.Stu ON dbo.SS.S_No = dbo.Stu.S_No INNER JOIN dbo.Sheets ON dbo.Stu.Stu_No = dbo.Sheets.Stu_No INNER JOIN dbo.[Plan] ON dbo.P_S.P_No = dbo.[Plan].P_No where dbo.[Plan].P_No = 'P1' group by dbo.SS.sname) AAA join (SELECT dbo.SS.sname, count(*) as CT2 FROM dbo.SS INNER JOIN dbo.P_S ON dbo.SS.S_No = dbo.P_S.S_No INNER JOIN dbo.Stu ON dbo.SS.S_No = dbo.Stu.S_No INNER JOIN dbo.Sheets ON dbo.Stu.Stu_No = dbo.Sheets.Stu_No INNER JOIN dbo.[Plan] ON dbo.P_S.P_No = dbo.[Plan].P_No where dbo.[Plan].P_No = 'P1' and dbo.Sheets.Status = 3 group by dbo.SS.sname) BBB on AAA.sname = BBB.sname [/code] |
jackiemi2_seed
中階會員 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
方法1:
select AAA.sname,CT,CT2,convert(varchar, CT2 / convert(float,CT)*100) '%' as completion CT2的部份改成isnull(CT2,0) on AAA.sname = BBB.sname 改成left join, on AAA.sname *= BBB.sname 方法2: 這語法在ms sql 2000可行 SELECT dbo.SS.sname, count(*) as CT ,count(case when dbo.Sheets.Status = 3 then 1 else 0 end) as CT2 FROM dbo.SS INNER JOIN dbo.P_S ON dbo.SS.S_No = dbo.P_S.S_No INNER JOIN dbo.Stu ON dbo.SS.S_No = dbo.Stu.S_No INNER JOIN dbo.Sheets ON dbo.Stu.Stu_No = dbo.Sheets.Stu_No INNER JOIN dbo.[Plan] ON dbo.P_S.P_No = dbo.[Plan].P_No where dbo.[Plan].P_No = 'P1' group by dbo.SS.sname
------
OS : Win 7 pro Program : Delphi 7 DataBase : Ms Sql 2008
編輯記錄
jackiemi2_seed 重新編輯於 2009-07-03 10:48:42, 註解 無‧
|
tee101984
一般會員 發表:3 回覆:2 積分:1 註冊:2009-06-28 發送簡訊給我 |
===================引 用 jackiemi2_seed 文 章=================== 方法1: select AAA.sname,CT,CT2,convert(varchar, CT2 / convert(float,CT)*100) '%' as completion CT2的部份改成isnull(CT2,0) on AAA.sname = BBB.sname 改成left join, on AAA.sname *= BBB.sname 方法2: 這語法在ms sql 2000可行 SELECT dbo.SS.sname, count(*) as CT ,count(case when dbo.Sheets.Status = 3 then 1 else 0 end) as CT2 FROM dbo.SS INNER JOIN dbo.P_S ON dbo.SS.S_No = dbo.P_S.S_No INNER JOIN dbo.Stu ON dbo.SS.S_No = dbo.Stu.S_No INNER JOIN dbo.Sheets ON dbo.Stu.Stu_No = dbo.Sheets.Stu_No INNER JOIN dbo.[Plan] ON dbo.P_S.P_No = dbo.[Plan].P_No where dbo.[Plan].P_No = 'P1' group by dbo.SS.sname 方法1會出現on附近語法不正確 方法2可以執行,但是CT2的值跟CT的值一樣,並不會隨著dbo.Sheets.Status 的值更變。 請問是怎麼回事呢? |
tee101984
一般會員 發表:3 回覆:2 積分:1 註冊:2009-06-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |