use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#kehu_rhypp') is null
drop table #kehu_rhypp
Go
Create table #kehu_rhypp([id] int,[PP_mc] nvarchar(50))
Insert #kehu_rhypp
select 1,N'引航' union all
select 2,N'壳牌' union all
select 3,N'龙蟠' union all
select 4,N'康普顿' union all
select 5,N'角马' union all
select 6,N'统一'
Go
 
if not object_id(N'Tempdb..#Kehu_Info') is null
drop table #Kehu_Info
Go
Create table #Kehu_Info([KehuMc] nvarchar(5),[jyrhypp] nvarchar(12))
Insert #Kehu_Info
select N'张三修理厂',N'引航,龙蟠' union all
select N'李四修理厂',N'壳牌,引航' union all
select N'王二修理厂',N'角马,引航,壳牌' union all
select N'小小修理厂',N'康普顿,壳牌,龙蟠,引航' union all
select N'小王修理厂',N'统一'
Go
SELECT TOP 3 a.[PP_mc],COUNT(1) AS [次数]
FROM    #kehu_rhypp AS a
INNER JOIN #Kehu_Info AS b ON ','+b.[jyrhypp]+',' LIKE '%,'+a.[PP_mc]+',%'
GROUP BY a.[PP_mc]
ORDER BY [次数] DESC
/*
PP_mc 次数
引航 4
壳牌 3
龙蟠 2
*/

解决方案 »

  1.   

    use Tempdb
    go
    --> --> 
     
    if not object_id(N'Tempdb..#kehu_rhypp') is null
    drop table #kehu_rhypp
    Go
    Create table #kehu_rhypp([id] int,[PP_mc] nvarchar(50))
    Insert #kehu_rhypp
    select 1,N'引航' union all
    select 2,N'壳牌' union all
    select 3,N'龙蟠' union all
    select 4,N'康普顿' union all
    select 5,N'角马' union all
    select 6,N'统一'
    Go
     
    if not object_id(N'Tempdb..#Kehu_Info') is null
    drop table #Kehu_Info
    Go
    Create table #Kehu_Info([KehuMc] nvarchar(5),[jyrhypp] nvarchar(12))
    Insert #Kehu_Info
    select N'张三修理厂',N'引航,龙蟠' union all
    select N'李四修理厂',N'壳牌,引航' union all
    select N'王二修理厂',N'角马,引航,壳牌' union all
    select N'小小修理厂',N'康普顿,壳牌,龙蟠,引航' union all
    select N'小王修理厂',N'统一'
    Go;WITH Cte
    AS
    (SELECT  a.[PP_mc],COUNT(1) AS [次数]
    FROM    #kehu_rhypp AS a
    INNER JOIN #Kehu_Info AS b ON ','+b.[jyrhypp]+',' LIKE '%,'+a.[PP_mc]+',%'
    GROUP BY a.[PP_mc]
    )
    SELECT  CASE WHEN b.[PP_mc] IS NULL THEN N'其它'
                 ELSE a.[PP_mc]
            END AS [PP_mc]
           ,SUM([次数]) AS [次数]
    FROM    Cte AS a
            LEFT JOIN ( SELECT TOP 3
                                [PP_mc]
                        FROM    Cte
                        ORDER BY [次数] DESC
                      ) AS b ON a.[PP_mc] = b.[PP_mc]
    GROUP BY CASE WHEN b.[PP_mc] IS NULL THEN N'其它'
                  ELSE a.[PP_mc]
             END,b.[PP_mc]
    ORDER BY CASE WHEN b.[PP_mc] IS NULL THEN 2 ELSE 1 END,[次数] DESC
    /*
    PP_mc 次数
    引航 4
    壳牌 3
    龙蟠 2
    其它 3
    */
      

  2.   

    SQL2005以上用CTE,SQL2000版本把前三生成个别名表连接SQL2000方法
    (SELECT  CASE WHEN b.[PP_mc] IS NULL THEN N'其它'
                 ELSE a.[PP_mc]
            END AS [PP_mc]
           ,SUM([次数]) AS [次数]
    FROM    ( SELECT    a.[PP_mc]
                       ,COUNT(1) AS [次数]
              FROM      #kehu_rhypp AS a
                        INNER JOIN #Kehu_Info AS b ON ',' + b.[jyrhypp] + ',' LIKE '%,'
                                                      + a.[PP_mc] + ',%'
              GROUP BY  a.[PP_mc]
            ) AS a
            LEFT JOIN ( SELECT TOP 3
                                [PP_mc]
                        FROM    #kehu_rhypp AS a
                                INNER JOIN #Kehu_Info AS b ON ',' + b.[jyrhypp]
                                                              + ',' LIKE '%,'
                                                              + a.[PP_mc] + ',%'
                        GROUP BY a.[PP_mc]
                        ORDER BY COUNT(1) DESC
                      ) AS b ON a.[PP_mc] = b.[PP_mc]
    GROUP BY CASE WHEN b.[PP_mc] IS NULL THEN N'其它'
                  ELSE a.[PP_mc]
             END
           ,b.[PP_mc]
    ORDER BY CASE WHEN b.[PP_mc] IS NULL THEN 2
                  ELSE 1
             END
           ,[次数] DESC)
      

  3.   

    也可以直接UNION ALL吧,如果楼主的其他不其他是按ID大小来分的话
    SELECT a.[PP_mc],COUNT(1) AS [次数]
    FROM    #kehu_rhypp AS a
        INNER JOIN #Kehu_Info AS b ON ','+b.[jyrhypp]+',' LIKE '%,'+a.[PP_mc]+',%'
    WHERE a.[id]<=3
    GROUP BY a.[PP_mc]
    UNION ALL
    SELECT '其他',COUNT(1) AS [次数]
    FROM    #kehu_rhypp AS a
        INNER JOIN #Kehu_Info AS b ON ','+b.[jyrhypp]+',' LIKE '%,'+a.[PP_mc]+',%'
    WHERE a.[id]>3