从SQL Server中的多个重复行中选择一行

从SQL Server中的多个重复行中选择一行,sql,sql-server,select,duplicates,Sql,Sql Server,Select,Duplicates,如何选择高亮显示的第一行,而不是第二行。因此,如果order_num和rest_类型相同,则只返回第一个 我需要选择不重复的行 注意:列标题ID由DB自动创建,在select中非常重要 屏幕截图显示了我的问题 挑选 [HeaderId], [fkPosCloseId], [TransNo], [fkRestTransType], [总数], [TransTypeID], [转换日期], [闭门] 从…起 每日传送头 哪里 fkPosCloseId=230642 说明我的问题的屏幕截图: 试试这个

如何选择高亮显示的第一行,而不是第二行。因此,如果order_num和rest_类型相同,则只返回第一个

我需要选择不重复的行

注意:列标题ID由DB自动创建,在select中非常重要

屏幕截图显示了我的问题

挑选 [HeaderId], [fkPosCloseId], [TransNo], [fkRestTransType], [总数], [TransTypeID], [转换日期], [闭门] 从…起 每日传送头 哪里 fkPosCloseId=230642

说明我的问题的屏幕截图:

试试这个。。。 删除标题_id和InsClosed,因为这两行中的标题不相同

SELECT  DISTINCT    
    [fkPosCloseId],
    [TransNo],
    [fkRestTransType],
    [Total],
    [TransTypeID],
    [TransDate]    
FROM  
    DailyTransHeader       
WHERE
    fkPosCloseId = 230642
    group by 
    [fkPosCloseId],
    [TransNo],
    [fkRestTransType],
    [Total],
    [TransTypeID],
    [TransDate]  
或者您可以尝试使用row_number,在这种情况下,group by子句的这些字段被添加到partition by中,并且headerid被用作order by

如果其他所有内容都相同,则这将给出第一个出现的行。

试试这个。。。
select * from (
SELECT 
    [HeaderId],
    [fkPosCloseId],
    [TransNo],
    [fkRestTransType],
    [Total],
    [TransTypeID],
    [TransDate],
    [InsClosed] ,
    ROW_NUMBER() over (partition by     [HeaderId],
    [fkPosCloseId],
    [TransNo],
    [fkRestTransType],
    [Total],
    [TransTypeID],
    [TransDate]  order by TransTypeID ) rn
FROM  
    DailyTransHeader       
WHERE
    fkPosCloseId = 230642
) t where rn=1
删除标题_id和InsClosed,因为这两行中的标题不相同

SELECT  DISTINCT    
    [fkPosCloseId],
    [TransNo],
    [fkRestTransType],
    [Total],
    [TransTypeID],
    [TransDate]    
FROM  
    DailyTransHeader       
WHERE
    fkPosCloseId = 230642
    group by 
    [fkPosCloseId],
    [TransNo],
    [fkRestTransType],
    [Total],
    [TransTypeID],
    [TransDate]  
或者您可以尝试使用row_number,在这种情况下,group by子句的这些字段被添加到partition by中,并且headerid被用作order by



如果其他所有内容都相同,这将第一次出现行。

要隐藏哪一行?你看了分组依据了吗?我可以看到两个选定行的ID不同。因此它们不是重复的。输出中没有重复项-每行至少有一列与其他列不同。您可以删除ID列并在其他列上选择DISTINCT。我认为问题是如何选择突出显示的第一行,而不是第二行。因此,如果rest_类型相同,则只返回第一行。要隐藏哪一行?你看了分组依据了吗?我可以看到两个选定行的ID不同。因此它们不是重复的。输出中没有重复项-每行至少有一列与其他列不同。您可以删除ID列并在其他列上选择DISTINCT。我认为问题是如何选择突出显示的第一行,而不是第二行。因此,如果rest_类型相同,则只返回第一行。感谢您的帮助,但代码返回相同的行,重复的行与DailyTransHeader中的select*相同,其中fkPosCloseId=230642,但+列RN Value=1如何选择高亮显示的第一行,而不是第二行。因此,如果rest_类型相同,则仅返回第一个OneHanks For Help,但代码返回相同的行,重复的行与DailyTransHeader中的select*相同,其中fkPosCloseId=230642,但+列RN值=1如何选择高亮显示的第一行,而不是第二行。因此,如果rest_类型相同,则只返回第一行感谢您的帮助,但代码返回相同的行,其中重复的行与DailyTransHeader中的select*相同,其中fkPosCloseId=230642,但没有列标题ID。这对我来说非常重要,如何选择高亮显示的第一行,而不是第二行。因此,如果rest_类型相同,只返回第一个oneThanks非常***第二个代码在通过此步骤1-添加列标题ID编辑code2后工作正常,第一次和第二次之后选择2-从DailyTransHeader添加其中fkPosCloseId=230642之后工作良好非常感谢您的帮助****第一次编码它只返回一行重复但没有列标题ID非常重要所有其他sql需要****@norhan:您需要接受答案,需要勾选以接受ans。感谢您的帮助,但代码返回的行与DailyTransHeader中的select*相同,其中fkPosCloseId=230642,但没有列标题。这对我来说非常重要,如何选择突出显示的第一行,而不是第二行。因此,如果rest_类型相同,只返回第一个oneThanks非常***第二个代码在通过此步骤1-添加列标题ID编辑code2后工作正常,第一次和第二次之后选择2-从DailyTransHeader添加其中fkPosCloseId=230642之后工作良好非常感谢您的帮助****第一次编码它只返回一行重复但没有列标题ID非常重要所有其他sql需要****@norhan:您需要接受答案,需要选择一个勾号来接受ans。
select * from (
SELECT 
    [HeaderId],
    [fkPosCloseId],
    [TransNo],
    [fkRestTransType],
    [Total],
    [TransTypeID],
    [TransDate],
    [InsClosed] ,
    ROW_NUMBER() over (partition by     [HeaderId],
    [fkPosCloseId],
    [TransNo],
    [fkRestTransType],
    [Total],
    [TransTypeID],
    [TransDate]  order by TransTypeID ) rn
FROM  
    DailyTransHeader       
WHERE
    fkPosCloseId = 230642
) t where rn=1