年级 班级 平均分 最高分 及格率
初1 A 80.6 94 87
初2 B 89.6 99 95.9
.....
转换成年级 A A平均分 A最高分 A及格率 B班级 B平均分 B最高分 B及格率 小弟想了一晚上也没想想出,在此请教.请指点
初1 A 80.6 94 87
初2 B 89.6 99 95.9
.....
转换成年级 A A平均分 A最高分 A及格率 B班级 B平均分 B最高分 B及格率 小弟想了一晚上也没想想出,在此请教.请指点
(select 年级 班级 平均分 最高分 及格率 from 表 where 年纪='初1') a,
(select 年级 班级 平均分 最高分 及格率 from 表 where 年纪='初2') b
insert test select '初1','A',80.6,94,87
union all select '初2','B',89.6,99,95.9declare @s varchar(8000)
set @s='SELECT 年级,班级'
select @s=@s+ ',MAX(case 班级 when '''+班级+''' then 平均分 end) as ['+班级+'平均分]
,MAX(case 班级 when '''+班级+''' then 最高分 end) as ['+班级+'最高分]
,MAX(case 班级 when '''+班级+''' then 及格率 end) as ['+班级+'及格率]'
from test
SET @s=@s+ ' FROM test GROUP BY 年级,班级'
exec(@s)年级 班级 A平均分 A最高分 A及格率 B平均分 B最高分 B及格率
---------- ---------- ------- ----------- ------- ------- ----------- -------
初1 A 80.6 94 87.0 NULL NULL NULL
初2 B NULL NULL NULL 89.6 99 95.9警告: 聚合或其它 SET 操作消除了空值。
declare @s varchar(8000)
set @s='SELECT 年级'
select @s=@s+ ',MAX(case 班级 when '''+班级+''' then 班级 end) as ['+班级+'班级]
,MAX(case 班级 when '''+班级+''' then 平均分 end) as ['+班级+'平均分]
,MAX(case 班级 when '''+班级+''' then 最高分 end) as ['+班级+'最高分]
,MAX(case 班级 when '''+班级+''' then 及格率 end) as ['+班级+'及格率]'
from test
SET @s=@s+ ' FROM test GROUP BY 年级'
exec(@s)年级 A班级 A平均分 A最高分 A及格率 B班级 B平均分 B最高分 B及格率
---------- ---------- ------- ----------- ------- ---------- ------- ----------- -------
初1 A 80.6 94 87.0 NULL NULL NULL NULL
初2 NULL NULL NULL NULL B 89.6 99 95.9
DECLARE @EDATE VARCHAR(10)
SELECT @SDATE=CONVERT(VARCHAR(10),@startdate,121)
SELECT @EDATE=CONVERT(VARCHAR(10),@enddate,121)
SELECT @SDATE=SUBSTRING(@SDATE,3,2)+SUBSTRING(@SDATE,6,2)+SUBSTRING(@SDATE,9,2)
SELECT @EDATE=SUBSTRING(@EDATE,3,2)+SUBSTRING(@EDATE,6,2)+SUBSTRING(@EDATE,9,2)SET @SQL=''
SELECT @SQL=@SQL+',SUM(CASE MACNA WHEN '''+MACNA+''' THEN COUN ELSE 0 END) AS '+MACNA
FROM (SELECT MACNA FROM SMNIN WHERE LEFT(MACID,2)='14')TSET @SQL='
SELECT ISNULL(MATNA,''合计'') AS MATNA'+@SQL+',SUM(COUN) AS 合计
FROM (SELECT T3.MACNA,
ISNULL(T2.MaterialCode,'' '') AS MATNA,
COUNT(*) AS COUN
FROM SSINF T1
LEFT JOIN tb_TE_Material T2
ON T1.TYRSP=T2.MaterialID
LEFT JOIN SMNIN T3
ON T1.MACID=T3.MACID
WHERE T1.ShiftNo>='''+@SDATE+'00000000000'' AND T1.ShiftNo<='''+@EDATE+'99999999999''
GROUP BY MACNA,MaterialCode) T
GROUP BY MATNA
WITH CUBE'
EXEC(@SQL)
FROM (SELECT MACNA FROM SMNIN WHERE LEFT(MACID,2)='14')T
这句就是你要的东西!