Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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,我正在反向工程一个MS Access查询,它标记重复项,然后根据某些条件决定保留哪一个。我使用GROUPBY语句找到了重复项。我的问题是想办法把条件写下来。MS Access查询所做的是按条件排序,然后使用FIRST函数选择满足大多数条件的行。SQL Server不使用FIRST,有什么想法可以先使用FIRST来实现这一点吗 我能想到的最好的方法是使用max(Opportunity),它将返回字段的一个实例,但没有任何条件来选择重复项 MS访问查询: SELECT Dup_A_Open_04_T

我正在反向工程一个MS Access查询,它标记重复项,然后根据某些条件决定保留哪一个。我使用GROUPBY语句找到了重复项。我的问题是想办法把条件写下来。MS Access查询所做的是按条件排序,然后使用
FIRST
函数选择满足大多数条件的行。SQL Server不使用
FIRST
,有什么想法可以先使用
FIRST
来实现这一点吗

我能想到的最好的方法是使用
max(Opportunity)
,它将返回字段的一个实例,但没有任何条件来选择重复项

MS访问查询:

SELECT Dup_A_Open_04_Temp1.[RequFX_Req_ID_Cont_ID:],
 First(Dup_A_Open_04_Temp1.[Oppty ID]) AS [FirstOfOppty ID], First(Dup_A_Open_04_Temp1.[Op id]) AS [FirstOfOp id], "Surving Oppty" AS Dup_A_Resolution
FROM Dup_A_Open_04_Temp1
GROUP BY Dup_A_Open_04_Temp1.[RequFX_Req_ID_Cont_ID:], "Surving Oppty";

[FirstOfOpty ID]
[FirstofOp ID]
是必须根据条件选择的

您应该能够使用窗口函数
RANK()。。。OVER()
。分区对应于原始查询的非聚合列:

SELECT *
FROM (
    SELECT 
        [RequFX_Req_ID_Cont_ID:],
        [Oppty ID] AS [FirstOfOppty ID], 
        [Op id] AS [FirstOfOp id],
        "Surving Oppty",
        RANK() OVER(PARTITION BY Dup_A_Open_04_Temp1.[RequFX_Req_ID_Cont_ID:] ORDER BY Opportunity DESC) rn
    FROM Dup_A_Open_04_Temp1 t
) x
WHERE rn = 1
注意:由于原始查询没有排序,因此很难准确判断窗口
RANK()
orderby
子句中应该使用哪一列。根据您对问题的描述,我选择了专栏
Opportunity
。您可能需要根据您的具体使用情况进行调整。

使用ROW_NUMBER()来识别重复的行:

SELECT t1.[RequFX_Req_ID_Cont_ID:], t1.[Oppty ID] AS [FirstOfOppty ID],
    t1.[Op id] AS [FirstOfOp id], 
    ROW_NUMBER() OVER(PARTITION BY t1.[RequFX_Req_ID_Cont_ID:] ORDER BY t1.[Oppty ID]) AS ROWNUMBER
FROM Dup_A_Open_04_Temp1 t1
WHERE ROWNUMBER > 1

坦白地说,我不清楚您的查询。我建议您使用诸如行数、排名等窗口功能。还有,一旦您可以尝试
第一个值