一个sql中常遇到的表结构转换问题

it2022-05-09  27

score表结构如 name  subject  score ----------------------------------- 大都    语文     59 大都    数学     78 大都    外语     89 大都    物理     98 小都    语文     90 小都    外语     80 小都    物理     70 德国    语文     90 德国    数学     50 德国    外语     80 德国    物理     89 哈哈    语文     99 哈哈    数学     80 哈哈    物理     89 现需转换成表结构如: 姓名 数学 外语 物理 语文 ----------------------------------------- 大都   78    89     98     59 德国   50    80     89     90 哈哈   80    0       89     99 小都   0      80     70     90 解决之道: --当出现的subject的个数不定的时候 declare @sql varchar(8000) set @sql='SELECT name as 姓名' select @sql=@sql+',['+subject+']=MAX(CASE subject WHEN '''+subject+''' THEN score ELSE 0 END)' from score group by subject exec(@sql+' FROM score GROUP BY name') --当出现的subject的个数确定的时候 select name as 姓名, 数学=MAX(CASE WHEN subject='数学' THEN score ELSE 0 END), 外语=MAX(CASE WHEN subject='外语' THEN score ELSE 0 END), 物理=MAX(CASE WHEN subject='物理' THEN score ELSE 0 END), 语文=MAX(CASE WHEN subject='语文' THEN score ELSE 0 END) from score group by name

转载于:https://www.cnblogs.com/tuyile006/archive/2007/05/09/740234.html


最新回复(0)