SQL Server的第一个选项是什么?
我正在反向工程一个MS Access查询,它标记重复项,然后根据某些条件决定保留哪一个。我使用GROUPBY语句找到了重复项。我的问题是想办法把条件写下来。MS Access查询所做的是按条件排序,然后使用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
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
坦白地说,我不清楚您的查询。我建议您使用诸如行数、排名等窗口功能。还有,一旦您可以尝试
第一个值
,