日期:2014-05-17  浏览次数:20374 次

group by 问题,求秒。
有一表如下:   
ID,Name
1 A
2 B
3 A,B,C
4 A,B
5 C
6 B

想对 Name 做统计, 其中ID=3的分别要记 A,B,C 各一次,ID=4分别记A,B各一次。这样语句怎么写?
------最佳解决方案--------------------
引用:
结果应该是什么样子的?

猜一个

SQL code
select ID,len(Name)-len(replace(Name,',',''))+1 from tb
阿汤哥也那么晚睡
------其他解决方案--------------------
学习飘过!都是强人啊! 居然都是 0:00 ++ 还在逛论坛解决问题。膜拜一下!
------其他解决方案--------------------
只有4分了。
------其他解决方案--------------------
结果应该是什么样子的?

猜一个

select ID,len(Name)-len(replace(Name,',',''))+1 from tb

------其他解决方案--------------------
--构建测试数据
create table #TB(ID INT,NAME VARCHAR(10))
INSERT INTO #TB select '1', 'A'
      union all select '2', 'B'
      union all select '3', 'A,B,C'
      union all select '4', 'A,B'
      union all select '5', 'C'
      union all select '6', 'B'
--创建存储过程
alter proc SplitTable    
@table varchar(50),    
@Splitcolumn varchar(50),    
@flag char(1)    
as    
set nocount on    
declare @sql varchar(max)    
set @sql = '    
SELECT a.* , SUBSTRING(a.'+@Splitcolumn+', number, CHARINDEX('''+@flag+''', a.'+@Splitcolumn+' + '''+@flag+''', number) - number) AS element     
FROM '+@table+' a    
  JOIN master..spt_values   
    ON number <= LEN(a.'+@Splitcolumn+') and  type=''p''    
    AND SUBSTRING('''+@flag+''' + a.'+@Splitcolumn+', number, 1) = '''+@flag+''' and  SUBSTRING(a.'+@Splitcolumn+', number, CHARINDEX('''+@flag+''', a.'+@Splitcolumn+' + '''+@flag+''', number) - number) <>''''  
'    
exec (@sql)

--解决方案
  select top(0)*,cast(null as varchar(500)) as element into #tA from #Tb  
  insert into #ta exec splitTable '#TB','NAME',','      
  select element,count(element)as num from #ta group by element
  /*element