如何从sql server中的类似记录中选择一行?

时间:2015-03-04 22:18:23

标签: sql-server

我有一个包含这样的数据的表,

GroupName   group_code  company_name   Company      Jan    Feb  
  USA         G142       3M Corp        3MCorp      117     35
  USA        G23581      3M Corp        3MCorp      117     35
  USA         G899       3M Corp        3MCorp      117     35
  USA         G2165      MNA Inc.       MNA Inc.     5       3
  USA         G6245      MNA Inc.       MNA Inc.     5       3
  USA         G3425     Acterna Inc.  Acterna Inc.  245     204

最终结果应该是每个公司名称1行,最大的group_code值如下,

GroupName   group_code  company_name   Company      Jan    Feb  
  USA        G23581      3M Corp        3MCorp      117     35
  USA         G6245      MNA Inc.       MNA Inc.     5       3
  USA         G3425     Acterna Inc.  Acterna Inc.  245     204

我该怎么做?

4 个答案:

答案 0 :(得分:1)

这适用于您提供的测试数据。看起来您想要获取具有最大值(数字)尾随前导字符的group_code。所以,如果我认为正确,你可以试试这个:

WITH cteRankedGroupCodes
AS
(
    select  GroupName
            , group_code
            , company_name
            , company
            , jan
            , feb
            , rank() over ( partition by company_name 
                            order by convert(int, substring(group_code, 2, len(group_code))) desc
                           ) as GroupCodeRank
    from SimilarRecords --your table
)

select  GroupName
        , group_code
        , company
        , jan
        , feb 
from cteRankedGroupCodes 
where GroupCodeRank = 1

答案 1 :(得分:0)

您需要使用SQL Server Group By

答案 2 :(得分:0)

使用

SELECT [GroupName], max([group_code]), [company_name], [Company], [Jan], [Feb]
    FROM Table1
    GROUP BY [GroupName], [company_name], [Company], [Jan], [Feb]

如果您需要专门按数字顺序对group_code进行排序,则需要更改max函数中的表达式以引入前导零或重新格式化数据以按字典顺序排列。有关结果,请参阅SqlFiddle

答案 3 :(得分:0)

select GroupName ,  group_code , company_name  , Company   ,  Jan   ,Feb  
from table
group by GroupName   ,  company_name   ,Company   ,   Jan   , Feb 
having   group_code = max(group_code)