2016-02-26 37 views
1

我正在爲我的sql查詢結果尋找另一個解決方案。下面通過在SQL Server中保持相同順序避免重複行

我的查詢返回

SELECT 
    M.Mroutes_srno, M.Mroutes_loginid 
FROM 
    Mroutes M 
LEFT JOIN 
    MAccSanctioningLimit Limit ON M.mroutes_role = Limit.sac_type 
           AND M.Mroutes_moduleno = Limit.sac_moduleno 
           AND M.Mroutes_companycd = Limit.company_cd 
WHERE 
    M.mroutes_deptcd = 'BKAF' 
    AND M.Mroutes_moduleno = 145 
    AND M.mroutes_role NOT IN ('MIS', 'CFO', 'MD') 

輸出:

Mroutes_srno Mroutes_loginid 
-------------------------------- 
1 -------- AIJ1546 
2 -------- BCS8021 
3 -------- AIJ1546 
4 -------- BCS8021 
5 -------- venkatesh 
6 -------- 151N1636 

但是,刪除重複的行就會導致像下面後。

SELECT 
    M.Mroutes_loginid 
FROM 
    Mroutes M 
LEFT JOIN 
    MAccSanctioningLimit Limit ON M.mroutes_role = Limit.sac_type 
           AND M.Mroutes_moduleno = Limit.sac_moduleno 
           AND M.Mroutes_companycd = Limit.company_cd 
WHERE 
    M.mroutes_deptcd = 'BKAF' 
    AND M.Mroutes_moduleno = 145 
    AND M.mroutes_role NOT IN ('MIS', 'CFO', 'MD') 
GROUP BY 
    M.Mroutes_loginid 

輸出:

Mroutes_loginid 
--------------- 
151N1636 
AIJ1546 
BCS8021 
venkatesh 

我需要保持該查詢相同的順序。

+0

將訂單條款添加到您的查詢中。類似於「由M.Mroutes_srno ASC訂購」。 –

+1

目前還不清楚你的問題是什麼,或者你想達到什麼目的。如果你想要的是一致的順序,你可以使用Mroutes_loginid命令。 –

+0

*我需要以相同的順序保留查詢。* - 在這種情況下,您必須在您的SELECT中明確指定一個ORDER BY子句。 –

回答

1

您需要使用row_number窗函數:

;WITH cte AS(
SELECT M.Mroutes_srno, 
     M.Mroutes_loginid, 
     ROW_NUMBER() OVER(PARTITION BY M.Mroutes_loginid ORDER BY M.Mroutes_srno) rn 
from Mroutes M 
left JOIN MAccSanctioningLimit Limit on M.mroutes_role =Limit.sac_type 
    and M.Mroutes_moduleno = Limit.sac_moduleno 
    and M.Mroutes_companycd = Limit.company_cd 
where M.mroutes_deptcd ='BKAF' 
and M.Mroutes_moduleno =145 
and M.mroutes_role NOT in ('MIS', 'CFO', 'MD')) 

SELECT Mroutes_srno, Mroutes_loginid 
FROM cte 
WHERE rn = 1 
ORDER BY Mroutes_srno 

或者你可以通過像聚集訂購:

SELECT M.Mroutes_loginid 
from Mroutes M 
left JOIN MAccSanctioningLimit Limit on M.mroutes_role =Limit.sac_type 
    and M.Mroutes_moduleno = Limit.sac_moduleno 
    and M.Mroutes_companycd = Limit.company_cd 
where M.mroutes_deptcd ='BKAF' 
and M.Mroutes_moduleno = 145 
and M.mroutes_role NOT in ('MIS', 'CFO', 'MD') 
group by M.Mroutes_loginid 
order by min(M.Mroutes_srno) 
+0

謝謝..我使用聚合選項的順序它的工作 –

0

它發生,因爲..有可能是你的..刪除查詢刪除Mroutes表中的重複記錄是刪除第一個出現的AIJ1546值..其中前導151N1636在結果集中排在第一位...

嘗試跳過重複的值..你的萬阿英,蔣達清將得到解決的第一個匹配行..

注:當你沒有指定在選擇查詢它的默認選擇primary key to sort the result set條款的任何命令。 。