2011-09-16 52 views
1

我有2個表,一個主表和一個事務表。我想根據一個條件對主表的 查詢結果進行排序:如果學生號和學名已經在交易表中存在 或基本上,如果記錄(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 

--This查詢是不存在的記錄着呢,它應該位於查詢集的頂部。

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 & ccc,因爲它在tranasct表中存在 。

我該如何做到這一點?

謝謝。請幫助

回答

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值將收集所有與沒有匹配的行。

+0

nope。不工作 –

+0

結果是什麼? –

+1

@Blair - 什麼不行? (除了錯字'ST.STUDNOO') –

0

試試這個 - 它基本上採用的是菲爾的回答有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 
+0

你會介意再幫助我嗎? http://stackoverflow.com/questions/7440920/get-latest-id-from-a-duplicate-records-in-a-table –