Évitez les lignes dupliquées en conservant le même ordre dans SQL Server

Je suis à la search d'une autre solution pour mon résultat de requête sql.

Ma requête ci-dessous renvoie

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') 

Sortie:

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

Mais, après avoir supprimé les lignes en double, il en résulte comme ci-dessous.

 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 

Sortie:

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

Je dois garder la requête dans le même ordre.

Vous devez utiliser la fonction de la window 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 

Ou vous pouvez order par agrégation comme:

 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) 

Il se passe parce que .. il pourrait être possible que .. votre request de suppression qui supprime l'logging en double de la table Mroutes est la suppression de la première occurrence de valeurs AIJ1546 .. ce qui conduit 151N1636 à venir en premier dans le jeu de résultats …

Essayez d'ignorer la première ligne d'occurrence de la valeur dupliquée. Votre problème sera résolu.

Remarque: Lorsque vous n'avez pas spécifié de clause order by dans la requête select, select par défaut la primary key to sort the result set .