Sql 选择查询排序问题
我有两个表,一个主表和一个事务表。我想把这些东西分类 基于以下条件的主表查询结果:如果已输入学号和学名 存在于事务表中,或者如果记录(stud no,studname)已经存在于 事务表) 如果记录已经存在,则结果集应位于查询的最后一部分 我曾经在这里询问过。我将合并这两个数据集或使用联合 我这里有一个问题,但它似乎不起作用:Sql 选择查询排序问题,sql,select,Sql,Select,我有两个表,一个主表和一个事务表。我想把这些东西分类 基于以下条件的主表查询结果:如果已输入学号和学名 存在于事务表中,或者如果记录(stud no,studname)已经存在于 事务表) 如果记录已经存在,则结果集应位于查询的最后一部分 我曾经在这里询问过。我将合并这两个数据集或使用联合 我这里有一个问题,但它似乎不起作用: SELECT m.studno, m.studname FROM MASTERTABLE M inner JOIN TRANSACTTABLE S ON m.STUDN
SELECT m.studno, m.studname FROM MASTERTABLE M
inner JOIN TRANSACTTABLE S
ON m.STUDNO <> s.STUDNOO and m.studname <> s.studname
--此查询用于现有记录,并且应位于查询集的最后一行
SELECT m.studno, m.studname FROM MASTERTABLE M
inner JOIN TRANSACTTABLE S
ON m.STUDNO = s.STUDNOO and m.studname = s.studname
仅举一个例子:
假设MASTERTABLE包含
id, studno, studname
9 78797 aaa
10 878 bbb
11 675 ccc
12 099 ddd
可交易
id, studno, studname
13 878 bbb
14 675 ccc
查询结果应为:
studno, studname
78797 aaa
099 ddd
878 bbb
675 ccc
前两行应该由studname aaa和ddd组成,因为这两行没有
存在于transact表中,后两个是bbb&ccc,因为它存在
存在于tranasct表中
我怎样才能做到这一点
谢谢。请帮助尝试以下操作:
SELECT m.studno, m.studname
FROM MASTERTABLE M
LEFT JOIN TRANSACTTABLE S ON m.STUDNO = s.STUDNOO and m.studname = s.studname
ORDER BY s.STUDNO
s.STUDNO中的空值将收集所有不匹配的行。试试这个-它基本上使用Phil的答案所具有的
左外部联接,并且基于TransactionTable
是否有值,它定义了一个序列
值并根据该值进行排序:
DECLARE @MasterTable TABLE (ID INT, StudNo INT, StudName VARCHAR(20))
INSERT INTO @MasterTable
VALUES(9, 78797, 'aaa'), (10, 878, 'bbb'), (11, 675, 'ccc'), (12, 099, 'ddd')
DECLARE @Transact TABLE (ID INT, StudNo INT, StudName VARCHAR(20))
INSERT INTO @Transact
VALUES(13, 878, 'bb'), (14, 675, 'ccc')
SELECT
m.studno, m.studname,
CASE WHEN s.studname IS NULL THEN 1 ELSE 0 END 'Sequence'
FROM
@MASTERTABLE M
LEFT OUTER JOIN
@TRANSACT S ON m.STUDNO = s.STUDNO
ORDER BY
sequence DESC, s.STUDNO DESC
我得到的输出是:
studno studname Sequence
78797 aaa 1
99 ddd 1
878 bbb 0
675 ccc 0
@布莱尔-什么不起作用?(除了打字错误以外)你介意再帮我一次吗?你介意再帮我一次吗?