Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2016:需要对不同表中字符类型的属性进行排序_Sql Server - Fatal编程技术网

Sql server SQL Server 2016:需要对不同表中字符类型的属性进行排序

Sql server SQL Server 2016:需要对不同表中字符类型的属性进行排序,sql-server,Sql Server,我有一个大学SQL类项目的小数据库。该数据库收集了有关潜水训练的信息 我有一个表,它是类,有一列IREQ char(2)。这是课程列表,IREQ列是该课程所需的讲师类型 另一个表是INST,其列为INSTYPE char(2)。这是讲师信息表,INSTYPE列是讲师的当前类型。 第三个表是三列的ITITLE;TNUM int,TITLE varchar(40),TABR char(2)。TNUM是用于排名的每一行的序列号。TITLE是每个培训师级别的全名。TABR是标题的两个字符缩写,对应于前面

我有一个大学SQL类项目的小数据库。该数据库收集了有关潜水训练的信息

我有一个表,它是类,有一列IREQ char(2)。这是课程列表,IREQ列是该课程所需的讲师类型

另一个表是INST,其列为INSTYPE char(2)。这是讲师信息表,INSTYPE列是讲师的当前类型。 第三个表是三列的ITITLE;TNUM int,TITLE varchar(40),TABR char(2)。TNUM是用于排名的每一行的序列号。TITLE是每个培训师级别的全名。TABR是标题的两个字符缩写,对应于前面表格中的INSTYPE和IREQ

我需要检查哪些讲师的培训师水平足够高,可以在给定的一个月内教授给定的课程

我有选课和月份

where 
    CNUMBER like 'SD____'
    and 7 = month(STARTDATE)
SELECT命令包括每个讲师的姓名/别名/姓氏、讲师编号、课程编号、课程名称、开始日期

从所有三张桌子

我在子查询中尝试了一个子查询,但在where之后出现了一个错误,需要一个“exists”语句

我尝试了其他一些方法,但无法将其转换为用于排名比较的数值。我只有两个字符的字段,这是标题的缩写,这在所有三个表中都很常见,但不能是外键(我可以看到)。我能想到的唯一一件事是,以某种方式将IREQ或TNUM字段的值设置为与匹配的TABR字段的TNUM值相等。ITITLE表正好有8行,TABR与TNUM值不按字母顺序排列。我制作这个表是为了给TABR分配一个数字,这样我就可以在另一组表之间进行类似的比较


谢谢

尝试在SQL中与windows函数一起使用

由于您尚未提供STARTDATE或CNNumber的来源,您可以根据自己的需要进行调整(添加where子句并更新所需的列):

选择c.*,t1.*,i.*
来自c类
在c.IREQ=t1.TABR上连接ITITLE t1

请编辑问题并添加几十行样本数据和基于这些数据的预期结果。
——为潜水类创建表类创建表类(CNUMBER char(6)主键,CNAME varchar(40)not null,STARTDATE date,DUR int,SCHED varchar(10),PREREQ varchar(6),INUM char(10),IREQ char(2)不为空)
--为讲师信息创建一个表格,包括--培训级别和任何限制或限制。创建表INST(INUM int主键,INSLNAME varchar(25)不为空,INSFNAME varchar(20)不为空,INSNNAME varchar(25),INSTYPE char(2),INSSPECIALS varchar(50);
-创建一个将当前讲师标题编码为比较操作级别值的表。创建表ITITLE(TNUM int(1)主键,title varchar(40)不为null,TABR char(2)不为null)
很抱歉注释中的格式设置。第一次发布。这些是我使用的create table语句。这可能会起作用。我要到明天才能找到它。如上所述,还有几个用于名称等的select属性。CNUMBER和STARTDATE列都在类表中。我会将您的建议用作子查询还是main查询以包含类表中的剩余信息?或者简单地在顶部添加所需的SELECT属性,然后在最后一个连接后添加WHERE子句?此外,为了清楚地理解,第一个连接是类表和ITITLE表上的内部连接,其中IREQ=TABR,这是一个字符比较。第三个连接是将INSTYPE扩展到ITITLE表。因此,第二个连接是第一个连接的TNUM和第三个连接的TNUM之间的自连接?第一个/第三个比较字符集和第二个比较int值(秩)?在您的第二条注释中-如前所述,select语句将重新运行类表中的所有列,以及ITITLE中的所有列(与类相关)和INST表中的所有列。如果您只需要特定列,请逐个列出它们:选择c.CNAME、c.STARTDATE、…、t1.TITLE“Class Rank”、t2.TITLE“讲师Rank”…在您的第三条注释中,您的思路是正确的。如果ITITLE.TABR是唯一的,则第一个联接是一对一的,因此不会产生更多记录,而只是简单地“将TNUM添加到类记录中。第二次联接将ITITLE中排名相等或更高的每个记录的类记录相乘。第三次联接将删除没有相应(基于t2排名)指令的任何记录。”。
select c.*, t1.*, i.* 
from     CLASS   c 
    join ITITLE t1 on  c.IREQ  = t1.TABR
    join ITITLE t2 on t1.TNUM <= t2.TNUM
    join INST    i on t2.TABR  =  i.INSTYPE