2013-08-23 44 views
-3

這是用於SQL * PLUS的SQL * PLUS並置問題

我有一個表格「Patient」,它有5個字段。

CREATE TABLE PATIENT 
(PAT_ID   CHAR (4) PRIMARY KEY, 
PAT_NAME  VARCHAR (7), 
ADMITTED  DATE, 
ROOM   CHAR (3), 
DOCTOR   VARCHAR (7)); 

INSERT INTO PATIENT VALUES 
(1001, 'FRED', '30-MAR-07', 101, 'PAYNE'); 

我想創建一個視圖在我的輸出看起來像這樣:

Patient  Doctor  Room   Admitted  
"-----------------------------------------------" 
1001 Fred Payne  101  March 31, 2007 

的問題是,我想連接Pat_name和Pat_ID到自己獨立的「病人」列,但ALSO還有其他三個字段也與它連接(注意「破折號」中沒有分隔)。

基本上,我有5個領域。爲了簡單起見,我們稱它們爲「1,2,3,4,5」字段。

我想將它們全部結合在一起,但首先,我需要結合字段1和2.這個小列(結合字段1和2)將被稱爲「患者」。那麼,我需要將字段3,4和5連接到Patient列,以便所有5個字段現在連接在一起,但只有4個標題。

+2

我會努力拿出一個更innapropriate設計一張桌子比這一張。撇開奇怪的命名約定,我發現表格結構中至少有7個故障。 – symcbean

+0

查看sqlplus格式化選項:[http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch6.htm#i1081534](http://docs.oracle.com/cd/B19306_01 /server.102/b14357/ch6.htm#i1081534)。你可以設置標題,按照你想要的方式設置標題,做列格式等。 – Glenn

+1

你的學校的說明書是否說「讓StackOverflow上的好人爲你完成你的任務」?不要想。你的其他線程提供了足夠的信息,讓你自己想出了這些。相反,你發佈一個重複的問題。 V差。 – APC

回答

0

您可以將表達式與Oracle ||級聯運算符連接在一起。

要獲得間距,可以使用RPAD函數將表達式填充到指定的長度(如果長度較長,則將它們截斷爲指定的長度)。

COL myline HEADING "Patient  Doctor  Room   Admitted" 

SELECT RPAD(p.PAT_ID,5)||RPAD(p.PAT_NAME,8)||RPAD(p.DOCTOR,13) 
     ||RPAD(p.ROOM,4)||TO_CHAR(p.ADMITTED,'Month dd, yyyy') 
     AS myline 
    FROM patient p 
ORDER BY p.PAT_ID 

您展示您的線路上的日期值實際上將被格式化爲

March  31, 2007 

(在月份名稱,最長的月份名稱「九」(甲骨文保留空間額外的空間?)在


該格式模式可能還需要添加一個SQL * Plus指令指定列的顯示保留的長度,例如:

COL myline FORMAT A48 

如果你可以的東西,看起來像這樣的工作:

Patient  Doctor  Room Admitted  
------------ ------------ ------ ------------------ 
1001 Fred Payne  101 March  31, 2007 

然後是這樣的:

COL Patient FORMAT A13 
COL Doctor FORMAT A13 
COL Room  FORMAT A6 
COL Admitted FORMAT A21 

set lines 41 
set feedback off 

SELECT RPAD(p.PAT_ID,5)||RPAD(p.PAT_NAME,8) AS "Patient" 
    , RPAD(p.DOCTOR,13) AS "Doctor" 
    , RPAD(p.ROOM,6) AS "Room" 
    , TO_CHAR(p.ADMITTED,'Month dd, yyyy') AS "Admitted" 
    FROM patient p 
ORDER BY p.PAT_ID