有一张表 #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相比较感激,感激。
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相比较感激,感激。
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 行)*/