我有一個包含循環代碼列表的表.CYCLE_DEFINITION。 每個cycle_code在另一個表中有12個月的條目(PM1_CYCLE_STATE)。 每個月都有一個cycle_start_date和一個cycle_close_date。 我會檢查一個特定的日期(可以說sysdate)並檢查每個週期的當前月份是什麼。此外,我還將獲得該特定週期未來3個月的列表。sql查詢 - 需要一些建議
我寫的查詢如下:
SELECT cycd,cm,sd,ed,ld FROM (SELECT pcs.cycle_code CYCD,LTRIM(pcs.cycle_month,'0')+0 CM, pcs.cycle_start_date SD,pcs.cycle_close_date ED,ld.logical_date LD FROM pm1_cycle_state pcs,logical_date ld WHERE
ld.logical_date BETWEEN pcs.cycle_start_date AND pcs.cycle_close_date and ld.logical_date_type='B')
UNION
SELECT cycd,cm,sd,ed,ld FROM (SELECT pcs.cycle_code CYCD,DECODE(LTRIM(pcs.cycle_month,'0')+1,13,1,14,2,15,3,LTRIM(pcs.cycle_month,'0')+1) CM ,pcs.cycle_start_date SD,pcs.cycle_close_date ED,ld.logical_date LD FROM pm1_cycle_state pcs,logical_date ld WHERE
ld.logical_date BETWEEN pcs.cycle_start_date AND pcs.cycle_close_date and ld.logical_date_type='B')
UNION
SELECT cycd,cm,sd,ed,ld FROM (SELECT pcs.cycle_code CYCD,DECODE(LTRIM(pcs.cycle_month,'0')+2,13,1,14,2,15,3,LTRIM(pcs.cycle_month,'0')+2) CM ,pcs.cycle_start_date SD,pcs.cycle_close_date ED,ld.logical_date LD FROM pm1_cycle_state pcs,logical_date ld WHERE
ld.logical_date BETWEEN pcs.cycle_start_date AND pcs.cycle_close_date and ld.logical_date_type='B')
UNION
SELECT cycd,cm,sd,ed,ld FROM (SELECT pcs.cycle_code CYCD,DECODE(LTRIM(pcs.cycle_month,'0')+3,13,1,14,2,15,3,LTRIM(pcs.cycle_month,'0')+3) CM ,pcs.cycle_start_date SD,pcs.cycle_close_date ED,ld.logical_date LD FROM pm1_cycle_state pcs,logical_date ld WHERE
ld.logical_date BETWEEN pcs.cycle_start_date AND pcs.cycle_close_date and ld.logical_date_type='B')
該查詢運行完全正常。 這將導致當前月份和未來3個月的所有cycle_codes包含4行。
現在的要求是,如果任何一個月missing.how我可以顯示它嗎? 爲例如:上述查詢的輸出是
cycd cm
102 1
102 10
102 11
102 12
103 1
103 10
103 11
103 12
104 1
104 10
104 11
104 12
現在讓我們說與cycd = 104和釐米= 11行是不存在於表格中,則上述查詢不會得到該行104 11
。 我只想顯示那些行。 我怎麼能這樣做?
您需要一個左外部連接http://dev.mysql.com/doc/refman/5.0/en/join.html – Konerak 2010-05-04 06:33:37