假如我现在有两个视图V_BKS,V_YJS,在V_BKS中没有导师工号字段,但是V_YJS中有导师工号字段,现在我要用SQL查询语句实现,如果是本科生,导师工号字段设置为‘无数据’,如果是研究生,查询展示导师工号字段
时间: 2024-09-14 12:16:30 浏览: 42
你可以通过联结两个视图并在WHERE子句中添加条件来实现这个需求。假设有一个字段`student_type`可以标识学生类型(本科生为'Undergraduate',研究生为'Master'),SQL查询大致如下:
```sql
SELECT V_BKS.*, V_YJS.tutor_employee_id AS tutor_employee_id
FROM V_BKS
LEFT JOIN V_YJS ON V_BKS.student_id = V_YJS.student_id -- 这里假设两个视图有共同的学生ID字段
WHERE V_BKS.student_type = 'Undergraduate'
OR (V_BKS.student_type = 'Master' AND V_YJS.tutor_employee_id IS NOT NULL);
CASE WHEN V_BKS.student_type = 'Undergraduate' THEN '无数据'
ELSE V_YJS.tutor_employee_id
END AS tutor_employee_id -- 如果你想在结果集中直接显示特定文本
```
在这个查询中,如果学生是本科生,`tutor_employee_id`将从`V_YJS`视图获取并设置为NULL,因为`V_BKS`中没有这个字段;如果是研究生,则会显示实际的导师工号。如果需要在结果集中统一显示"无数据",则使用CASE语句。
相关问题
SQL语句select SKDD_M as jsbm,STIMEZC zc FROM openquery([JWSERVER],'SELECT * FROM V_BKS_TIMETABLE_CLASSROOM where SUBSTRING(JCZ,2,1)=''4''') jwsj为什么会报错?
这个问题可能是由于以下几个原因之一导致的:
1. 缺少对链接服务器的访问权限;
2. 在链接服务器中没有定义名为 JWSERVER 的服务器;
3. 在链接服务器中定义的服务器名称与你的语句中使用的名称不匹配;
4. 在链接服务器中定义的服务器不支持 Openquery 函数;
5. SQL Server 版本不支持 Openquery 函数。
你可以检查以上几个原因,看是否有问题。同时,你也可以提供更多的错误信息,以便更好地定位问题所在。
SQL语句: SELECT SKDD_M,XN,XQ_ID,STIMEZC,JC,JCZ FROM V_BKS_TIMETABLE_CLASSROOM WHERE SUBSTR(JCZ,2,1)='4' and SUBSTR(JC,0,charindex('-',JC))>=3 and SUBSTR(JC,charindex('-',JC)+1,len(JC))<=5改为Oracle数据语句。
Oracle语句:
SELECT SKDD_M, XN, XQ_ID, STIMEZC, JC, JCZ
FROM V_BKS_TIMETABLE_CLASSROOM
WHERE SUBSTR(JCZ, 2, 1)='4' AND substr(JC,1,instr(JC,'-')-1)>=3 AND substr(JC,instr(JC,'-')+1,length(JC))<=5;
阅读全文