2011-03-12 63 views
0
SELECT 
    T.clinic_code, C.dt, T.schedule_time, T.section_name, 
    T.section_content, CS.schedule_event_source_id 
FROM Master_Templates T 
    INNER JOIN Calendar C 
    ON T.dw = C.dw 
    AND T.mo = (C.D - 1)/7 + 1 
    AND C.Y = '2014' 
    AND C.M = '3' 
    AND T.clinic_code = 'ABC' 
    LEFT OUTER JOIN Clinic_Schedule CS 
    ON CS.schedule_date=convert(varchar, C.dt, 121) 
    AND CS.clinic_code=T.clinic_code 
    AND CS.schedule_time=T.schedule_time 
    AND CS.section_name = T.section_name 
    WHERE CS.schedule_event_source_id = 2 

Clinic_Schedule包含1個記錄:改變查詢返回的行不匹配

clinic_code | schedule_date | schedule_time | section_name | schedule_event_source_id ABC | 2014-03-03 | AM |教師| 2

Master_Template包含168個記錄:

clinic_code | dw | mo | schedule_time | section_name | section_content

日曆包含列以加入Master_Template記錄與星期幾。

如何更改上面的查詢以返回167行?即master_template中的總行數減去clinic_schedule中的行數。

+0

你至少需要將日曆上的連接更改爲左連接? – CarneyCode 2011-03-12 09:04:19

回答

1

這個怎麼樣:

SELECT 
    T.clinic_code, C.dt, T.schedule_time, T.section_name, 
    T.section_content, CS.schedule_event_source_id 
FROM Master_Templates T 
    INNER JOIN Calendar C 
    ON T.dw = C.dw 
    AND T.mo = (C.D - 1)/7 + 1 
    AND C.Y = '2014' 
    AND C.M = '3' 
    AND T.clinic_code = 'ABC' 
    LEFT OUTER JOIN Clinic_Schedule CS 
    ON CS.schedule_date=convert(varchar, C.dt, 121) 
    AND CS.clinic_code=T.clinic_code 
    AND CS.schedule_time=T.schedule_time 
    AND CS.section_name = T.section_name 
    AND CS.schedule_event_source_id = 2 
    WHERE CS.clinic_code IS NULL 

+0

太棒了,這是完美的,謝謝! – russds 2011-03-12 15:25:50

0

只返回從T中的記載,沒有在CS比賽,你可以使用HAVING,這是類似WHERE對JOIN的結果適用條件:

SELECT 
    T.clinic_code, C.dt, T.schedule_time, T.section_name, 
    T.section_content, CS.schedule_event_source_id 
FROM Master_Templates T 
INNER JOIN Calendar C 
    ON T.dw = C.dw 
    AND T.mo = (C.D - 1)/7 + 1 
    AND C.Y = '2014' 
    AND C.M = '3' 
    AND T.clinic_code = 'ABC' 
LEFT OUTER JOIN Clinic_Schedule CS 
    ON CS.schedule_date=convert(varchar, C.dt, 121) 
    AND CS.clinic_code=T.clinic_code 
    AND CS.schedule_time=T.schedule_time 
    AND CS.section_name = T.section_name 
    AND CS.schedule_event_source_id = 2 
HAVING CS.clinic_code IS NULL