Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过在SQL Server中保持相同的顺序避免重复行_Sql_Sql Server - Fatal编程技术网

通过在SQL Server中保持相同的顺序避免重复行

通过在SQL Server中保持相同的顺序避免重复行,sql,sql-server,Sql,Sql Server,我正在为我的sql查询结果寻找另一个解决方案 我下面的查询返回 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

我正在为我的sql查询结果寻找另一个解决方案

我下面的查询返回

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
Mroutes_loginid
---------------
151N1636
AIJ1546
BCS8021
venkatesh
但是,删除重复行后,结果如下所示

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_srno    Mroutes_loginid
--------------------------------
1   --------    AIJ1546
2   --------    BCS8021
3   --------    AIJ1546
4   --------    BCS8021
5   --------    venkatesh
6   --------    151N1636
Mroutes_loginid
---------------
151N1636
AIJ1546
BCS8021
venkatesh

我需要保持查询的顺序不变。

您需要使用
行号
窗口功能:

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

这是因为。。有可能。。从
Mroutes
表中删除重复记录的删除查询正在删除第一个出现的
AIJ1546
值。。哪个领先的
151N1636
在结果集中排在第一位

尝试跳过重复值的第一行。。你的问题会解决的


注意:如果在select query中未指定任何order by子句,则默认情况下选择
主键对结果集进行排序。

将order by子句添加到查询中。类似于“M.Mroutes\u srno ASC订购”。不清楚您的问题是什么,或者您试图实现什么。如果您想要的是一致的顺序,您可以使用Mroutes\u loginid的顺序。我需要保持查询的顺序相同。-在这种情况下,必须在
SELECT
yes权限中明确指定
orderby
子句。。有min订购的答案(M.Mroutes\u srno)谢谢。。我使用了按聚合排序选项来完成它的工作