2013-03-30 26 views
1

我有一個名爲Bed_registry表(用於醫院數據庫)APEX日曆 - 把一個ID上的日期範圍,而不僅僅是一個日期僅

CREATE TABLE Bed_Registry (
Visit_ID  CHAR(5) , 
Bed_ID  CHAR(5) , 
Admission_Date DATE  NOT NULL, 
Discharge_Date DATE, 
CONSTRAINT BR_PK PRIMARY KEY(Visit_ID, Bed_ID), 
CONSTRAINT BR_FK_visit 
    FOREIGN KEY (Visit_ID) 
    REFERENCES Visit (Visit_ID) 
    ON DELETE CASCADE, 
CONSTRAINT BR_FK_bed 
    FOREIGN KEY (Bed_ID) 
    REFERENCES Bed (Bed_ID) 
    ON DELETE CASCADE 
); 

我創建了這個表,我一個SQL日曆可以將Bed_ID放在日曆上,只有Admission_DateDischarge_Date之一。我想知道是否有任何方法可以顯示Bed_id不只是其中一個日期,而是在Admission_DateDischarge_Date之間的所有日子。

非常感謝!

+0

什麼是 「SQL日曆」? – koriander

+0

對不起,我應該澄清。它是在ORACLE APEX應用程序的一個頁面上的某個區域上製作的日曆。表達式 – Ponnnnn

+0

您應始終包含所需的輸出。 – Art

回答

1

您需要創建一個查詢來生成Admission_date和Discharge_date之間的日期。然後,您可以基於此查詢創建日曆。

要做到這一點,您首先需要一個數字爲0 ... n的表格,其中n足夠大以覆蓋醫院中停留的最大天數。

表天數:

Day 
0 
1 
2 
3 
4 
... 

然後你的查詢將是這樣的:

select Admission_date, Discharge_date, 
     Admission_date + days.day AS Occupied_date 
from beds, 
     (select days.day from days order by days.day) days 
where Admission_date + days.day <= Discharge_date 
order by Admission_date, Occupied_date; 

sqlfiddle demo

+0

+1您可以在沒有「天」表的情況下通過生成流上的行來完成此操作,例如,使用'SELECT ROWNUM as day FROM DUAL CONNECT BY LEVEL <= 31' –

+0

@JeffreyKemp:感謝您的反饋,我對Oracle不熟悉。無論如何,我不會推薦DBMS特定的解決方案,儘管我認爲SQL標準應該有一種方法可以根據函數定義的隱式集生成關係。 – koriander

+0

沒問題。 OP正在談論Apex,這意味着他們不會擔心跨平臺的可移植性。 –

相關問題