-3

これはSQL*PLUS用です

5つのフィールドを持つテーブル「Patient」があります。

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 を個別の「Patient」列に連結したいが、他の 3 つのフィールドも連結したいことです (「ダッシュ」に区切りがないことに注意してください)。

基本的に、私は5つのフィールドを持っています。簡単にするために、フィールドを「1、2、3、4、5」と呼びましょう。

それらすべてを結合したいのですが、まず、フィールド 1 と 2 を結合する必要があります。この小さな列 (フィールド 1 と 2 を結合したもの) は「患者」と呼ばれます。次に、フィールド 3、4、および 5 を [患者] 列と連結して、5 つのフィールドすべてが連結され、見出しが 4 つだけになるようにする必要があります。

4

1 に答える 1

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

(月名に余分なスペースがあるため、Oracle は、そのフォーマット モデルで最も長い月名 'September' (?) 用にスペースを予約します。


列の表示用に予約された長さを指定するために、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
于 2013-08-23T22:46:04.220 に答える