求教SQL语句!!(100分)

  • 主题发起人 主题发起人 ljzk
  • 开始时间 开始时间
L

ljzk

Unregistered / Unconfirmed
GUEST, unregistred user!
ORACL数据库
本人建了一人员基本档案表:
ZGBH VARCHAR2(8), --职工编号
ZGXM VARCHAR2(8) NOT NULL, --职工姓名
CYM VARCHAR2(8) , --曾用名
CSRQ DATE, --出生日期
XB NUMBER(1) , --性别
* MZDM VARCHAR2(2), --民族
* GRSF NUMBER(1), --个人身份
* QSBS NUMBER(1), --侨属标识
ZWFL VARCHAR2(4), --职位分类
HKD VARCHAR2(40), --户口所在地
* HKXZ NUMBER(1), --户口性质
JG VARCHAR2(12), --籍贯
CSD varchar2(12), --出生地
JTZZ VARCHAR2(40), --家庭住址
DHHM VARCHAR2(20), --家庭电话及移动电话
CHHM VARCHAR2(20), --传呼
SFZH CHAR(18), --身份证号
* JKZK VARCHAR2(2), --健康状况(见数据字典)
* HYZK NUMBER(1), --婚姻状况(1未婚,2已婚,3丧偶,4离婚,9其他)
ZZMM VARCHAR2(2), --政治面貌代码(见数据字典)
WHCD VARCHAR2(2), --文化程度代码(见数据字典)
* ZCDM VARCHAR2(3), --职称代码
BYXX VARCHAR2(30), --毕业学校
BYSJ varchar2(10), --毕业时间
ZY VARCHAR2(20), --专业
GZRQ DATE, --参加工作日期
BGZRQ DATE, --进本单位日期
* BMGW VARCHAR2(10), --部门代码
加*号的字段保存的是相应的代码,如:MZDM --民族
其民族代码表结构为:
MZDM 民族表:
DM MC
01 汉族
02 蒙古族
03 回族
04 藏族
05 维吾尔族
06 苗族

WHCDDM 文化程度表:
DM MC
10 研究生
11 研究生毕业
19 研究生肄业
20 大学本科
21 职高毕业
28 相当大学毕业

其他字段依此类推。
怎样创建一视图,能方便地将所有人员基本档案表中保存的代码‘翻译’成相对的汉字名称
这样一来,浏览人员基本档案表信息就方便多了?
注意:用户录入数据时,加*号的字段都可能为NULL!!
 
sql server 用case语句
 
创建几个表,不要reference,自己在程序里控制就可以了。
 
create V_RYJBDA as
select a.ZGBH,ZGXM,b.MD MZ, c.MC WHCD
from RYJBDA a, MZDM b, WHCDDM c
where a.MZDM=b.DM
and a.WHCDDH=c.DM
 
TO:svw0506
此视图只能取到MZDM,WHCD等这些代码字段同时不为NULL的数据,当人员基本档案表中
这些字段中有NULL时就取不到本记录!!
 
外联接,SQL Server中为*,Oracle中为(+),可以使用Left Join等。
 
//用外连接呀,(+)
create V_RYJBDA as
select a.ZGBH,ZGXM,b.MD MZ, c.MC WHCD
from RYJBDA a, MZDM b, WHCDDM c
where a.MZDM=b.DM(+)
and a.WHCDDH=c.DM(+)
 
这种设计好像不太对哦。
如果代码修改了,那么岂不是乱套了。
 
TO:svw0506
用外连接呀,(+),不行,我已经试过了,RYJBDA取的记录数翻了几番,而我所需的
数据应该与RYJBDA中的数据量一致,原为NULL的字段,还是为NULL,只是将不为NULL的
代码字段‘翻译’成相应的汉字名称。

 
把(+)放在=的左边,再不行,我就没办法了,呵呵
 
左连接(或者右连接),语句视数据库不同而有差异SQL
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部