这适用于SQL * PLUS
我有一张桌子“患者”,有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组合)将被称为“患者”。那么,我需要在我的Patient列中连接字段3,4和5,以便所有5个字段现在连接在一起,但只有4个标题。
答案 0 :(得分: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在该格式模型中为最长的月份名称'9月'(?)预留空间。
您可能还需要添加一个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