当前位置: 代码迷 >> Sql Server >> sqlserver模模糊糊汇总
  详细解决方案

sqlserver模模糊糊汇总

热度:47   发布时间:2016-04-24 08:52:37.0
sqlserver模糊汇总
比如有如下数据:
id    name     age
1     ac1         5
2     bc1         10
3     cd2         8
4     dd2        18 

查询过后
id    name  age    汇总
1     ac1       5        2
3     cd2       8        2            就是根据name列只要含有c1或d2就认为是相同的数据来分组,而用count时要一模一样的。像这样的查询语句要怎么写呢?谢谢!

------解决思路----------------------
/* 测试数据
WITH table1(id,name,age)AS(
    SELECT 1,'ac1',5 UNION ALL
    SELECT 2,'bc1',10 UNION ALL
    SELECT 3,'cd2',8 UNION ALL
    SELECT 4,'dd2',18
)*/
        SELECT b.*,
               a.cnt 汇总
          FROM (
                    SELECT RIGHT(name,2) code,
                           COUNT(*) cnt
                      FROM table1
                  GROUP BY RIGHT(name,2)
               ) a
   CROSS APPLY (
                    SELECT TOP 1 *
                      FROM table1
                     WHERE RIGHT(name,2) = a.code
                  ORDER BY id
               ) b

         id name         age        汇总
----------- ---- ----------- -----------
          1 ac1            5           2
          3 cd2            8           2

------解决思路----------------------

我也写个不一样的:
WITH table1(id,name,age)AS(
    SELECT 1,'ac1',5 UNION ALL
    SELECT 2,'bc1',10 UNION ALL
    SELECT 3,'cd2',8 UNION ALL
    SELECT 4,'dd2',18
)

select id,name,age, 汇总
from 
(
select *,
       row_number() over(partition by right(name,2) order by id) as rn,
       count(*) over(partition by right(name,2)) as 汇总
from table1
)t
where rn = 1
/*
id name age 汇总
1 ac1 5 2
3 cd2 8 2
*/
  相关解决方案