我有2个表,一个主表和一个事务表。我想排序 根据条件查询主表的结果:如果学生编号和studname已经存在 存在于事务表中或基本上,如果记录(stud no,studname)已经在 交易表)。
如果记录已存在,则结果集应位于查询的最后部分。
我以前在这里查询。我将合并2个数据集或使用UNION
我在这里有一个查询,但似乎不起作用:
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
- 此查询适用于现有记录,它应位于查询集的lastrow中。
只是一个例子:
让我们说MASTERTABLE CONTAINS
id, studno, studname
9 78797 aaa
10 878 bbb
11 675 ccc
12 099 ddd
TRANSACTTABLE
id, studno, studname
13 878 bbb
14 675 ccc
查询结果应为:
studno, studname
78797 aaa
099 ddd
878 bbb
675 ccc
前两行应该由studname aaa和ddd组成,因为两者没有 交易表中存在,最后两个是bbb&amp; ccc因为它确实如此 存在于tranasct表中。
我怎样才能做到这一点?
感谢。请帮忙
答案 0 :(得分:3)
试试这个:
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中的NULL值将收集所有没有匹配的行。
答案 1 :(得分:0)
试试这个 - 它基本上使用了Phil的答案所具有的LEFT OUTER JOIN
,并且根据TransactTable
是否有值,它定义了Sequence
值并对其进行排序:
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