有2张表,结构和部分内容如下:
表1:包含以下字段:
工号,姓名,部门,性别,学历,职称。
表1有以下数据
10001,张三,001,1,3,1
10011,李四,002,2,2,2
10012,王五,001,2,2,2
表2:包含以下字段
代码名称,代码内容,父代码
部门1,001,部门
部门2,002,部门
男,1,性别
女,2,性别
博士,1,学历
硕士,2,学历
本科,3,学历
专科,4,学历
中专,5,学历
技校,6,学历
高中,7,学历
初中,8,学历
小学,9,学历
高级工程师,1,职称
工程师,2,职称
助理工程师,3,职称
技术员,4,职称
现在的问题是:如何做一个查询,将表1中全部数据选择出来,并且代码部分全部显示为相应的内容,查询结果类似以下:
10001,张三,部门1,男,本科,高级工程师
10011,李四,部门2,女,硕士,工程师
10012,王五,部门1,女,硕士,工程师
------解决方案--------------------------------------------------------
- SQL code
* -- 试验数据 -------------------------Create cursor t1 (工号 C(5), 姓名 C(8), 部门 C(3), 性别 C(1), 学历 C(2), 职称 C(2))Insert into t1 (工号, 姓名, 部门, 性别, 学历, 职称) values ('10001','张三','001','1','3','1')Insert into t1 (工号, 姓名, 部门, 性别, 学历, 职称) values ('10011','李四','002','2','2','2')Insert into t1 (工号, 姓名, 部门, 性别, 学历, 职称) values ('10012','王五','001','2','2','2')Create Cursor t2 (代码名称 C(10), 代码内容 C(3), 父代码 C(4))Insert Into t2 (代码名称, 代码内容, 父代码) values ('部门1','001','部门')Insert Into t2 (代码名称, 代码内容, 父代码) values ('部门2','002','部门')Insert Into t2 (代码名称, 代码内容, 父代码) values ('男','1','性别')Insert Into t2 (代码名称, 代码内容, 父代码) values ('女','2','性别')Insert Into t2 (代码名称, 代码内容, 父代码) values ('博士','1','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('硕士','2','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('本科','3','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('专科','4','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('中专','5','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('技校','6','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('高中','7','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('初中','8','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('小学','9','学历')Insert Into t2 (代码名称, 代码内容, 父代码) values ('高级工程师','1','职称')Insert Into t2 (代码名称, 代码内容, 父代码) values ('工程师','2','职称')Insert Into t2 (代码名称, 代码内容, 父代码) values ('助理工程师','3','职称')Insert Into t2 (代码名称, 代码内容, 父代码) values ('技术员','4','职称')* -- 查询语句 -------------------------Select a.工号, a.姓名, b.代码名称 as 部门, c.代码名称 as 性别, d.代码名称 as 学历, e.代码名称 as 职称 ;From t1 a ;Left join (select * from t2 where 父代码='部门') b on a.部门 = b.代码内容 ;Left join (select * from t2 where 父代码='性别') c on a.性别 = c.代码内容 ;Left join (select * from t2 where 父代码='学历') d on a.学历 = d.代码内容 ;Left join (select * from t2 where 父代码='职称') e on a.职称 = e.代码内容
------解决方案--------------------------------------------------------
有个笨法
假设所有的字段都是字符型
新建一个prg,
- C/C++ code
Lparameters a1,a2 Select 代码名称 From bb Where Alltrim(代码内容) = Alltrim(a1) And Alltrim(父代码) = Alltrim(a2) Into Cursor tempIf Reccount('temp') > 0 Return Alltrim(temp.代码名称)Else Return ''Endif
------解决方案--------------------------------------------------------
CREATE TABLE 表2 (代码名称 c(10),代码内容 c(3),父代码 c(4))
INSERT INTO 表2 VALUES ("部门1","001","部门")
INSERT INTO 表2 VALUES ("部门2","002","部门")
INSERT INTO 表2 VALUES ("男","1","性别")
INSERT INTO 表2 VALUES ("女","2","性别")
INSERT INTO 表2 VALUES ("博士","1","学历")
INSERT INTO 表2 VALUES ("硕士","2","学历")
INSERT INTO 表2 VALUES ("本科","3","学历")
INSERT INTO 表2 VALUES ("专科","4","学历")
INSERT INTO 表2 VALUES ("中专","5","学历")
INSERT INTO 表2 VALUES ("技校","6","学历")
INSERT INTO 表2 VALUES ("高中","7","学历")
INSERT INTO 表2 VALUES ("初中","8","学历")
INSERT INTO 表2 VALUES ("小学","9","学历")
INSERT INTO 表2 VALUES ("高级工程师","1","职称")
INSERT INTO 表2 VALUES ("工程师","2","职称")