有一张表 #Product,只有两个字段Name和TypeCREATE TABLE #Product (Name CHAR(4),Type CHAR(1))
INSERT INTO #Product
SELECT #Product '001','A' UNION ALL
SELECT #Product '001','B' UNION ALL
SELECT #Product '001','C' UNION ALL
SELECT #Product '001','D' UNION ALL
SELECT #Product '002','A' UNION ALL
SELECT #Product '002','D' UNION ALL
SELECT #Product '003','B' 
想用动态SQL得到所有的Name中Type重复出现的百分比,意思是以纵列的Name跟行列的Name相比较,Type重复出现的比例。结果如下:Name    001     002   003  
001     100%    50%    25%
002     100%    100%   0%
003     100%    0%     100%



。如果上面的方法可以想出的话,看看各位能不能再用同样的方法计算一下行列跟纵列的Name相比较感激,感激。

解决方案 »

  1.   

    Don't understand what you are trying to do.
      

  2.   

    CREATE TABLE #Product (Name CHAR(4),Type CHAR(1))
    INSERT INTO #Product
    SELECT  '001','A' UNION ALL
    SELECT  '001','B' UNION ALL
    SELECT  '001','C' UNION ALL
    SELECT  '001','D' UNION ALL
    SELECT  '002','A' UNION ALL
    SELECT  '002','D' UNION ALL
    SELECT  '003','B'  declare @sql varchar(8000)
    select @sql=isnull(@sql+',','select max(t1.name) as Name ,')+
    'ltrim(sum(case t2.name when '''+name+''' then 1 else 0 end) *100/(select count(1) from #Product where name = t1.name))+''%'''+ QUOTENAME(name)
    from (select distinct Name from #Product) t
    exec(@sql+' from #Product t1 cross join #Product t2 where t1.type=t2.type group by t1.name')
    /*Name 001           002           003           
    ---- ------------- ------------- ------------- 
    001  100%          50%           25%
    002  100%          100%          0%
    003  100%          0%            100%(所影响的行数为 3 行)*/