你参考下 DECLARE @SQL VARCHAR(8000) SET @SQL='SELECT 姓名,年龄' SELECT @SQL=@SQL+',ISNULL(CASE 科目 WHEN '''+科目+''' END,0)['+科目+']'FROM 课程表 SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄' EXEC(@SQL)
DECLARE @SQL VARCHAR(8000) SET @SQL='SELECT 姓名,年龄' SELECT @SQL=@SQL+',ISNULL(CASE 科目 WHEN '''+科目+''' THEN 成绩 END,0)['+科目+']'FROM 课程表 SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄' EXEC(@SQL)更正下~
DECLARE @SQL VARCHAR(8000) SET @SQL='SELECT 姓名,年龄' SELECT @SQL=@SQL+',ISNULL(MAX(CASE 科目 WHEN '''+科目+''' THEN 成绩 END),0)['+科目+']'FROM 课程表 SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄' EXEC(@SQL)丢三落四~~ 用餐去了
如果不用这种形式,简单的sql查询语句能实现吗?
这个是动态处理,如果不这样的话,只能参照你的课程表,把课程各列写死了SELECT 姓名,年龄 ,ISNULL(MAX(CASE 科目 WHEN '数学' THEN 成绩 END),0)[数学] ,ISNULL(MAX(CASE 科目 WHEN '英语' THEN 成绩 END),0)[英语] ,ISNULL(MAX(CASE 科目 WHEN '物理' THEN 成绩 END),0)[物理] ,ISNULL(MAX(CASE 科目 WHEN '化学' THEN 成绩 END),0)[化学] ,ISNULL(MAX(CASE 科目 WHEN '地理' THEN 成绩 END),0)[地理] ,ISNULL(MAX(CASE 科目 WHEN '语文' THEN 成绩 END),0)[语文] FROM 学生基本表 GROUP BY 姓名,年龄 --以下是SQL2005+的额外方式 SELECT 姓名,年龄,数学,英语,物理,化学,地理,语文 FROM 学生基本表 PIVOT(MAX(成绩)FOR 科目 IN([数学],[英语],[物理],[化学],[地理],[语文]))P
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT 姓名,年龄'
SELECT @SQL=@SQL+',ISNULL(CASE 科目 WHEN '''+科目+''' END,0)['+科目+']'FROM 课程表
SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄'
EXEC(@SQL)
SET @SQL='SELECT 姓名,年龄'
SELECT @SQL=@SQL+',ISNULL(CASE 科目 WHEN '''+科目+''' THEN 成绩 END,0)['+科目+']'FROM 课程表
SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄'
EXEC(@SQL)更正下~
SET @SQL='SELECT 姓名,年龄'
SELECT @SQL=@SQL+',ISNULL(MAX(CASE 科目 WHEN '''+科目+''' THEN 成绩 END),0)['+科目+']'FROM 课程表
SET @SQL=@SQL+'FROM 学生基本表 GROUP BY 姓名,年龄'
EXEC(@SQL)丢三落四~~
用餐去了
,ISNULL(MAX(CASE 科目 WHEN '数学' THEN 成绩 END),0)[数学]
,ISNULL(MAX(CASE 科目 WHEN '英语' THEN 成绩 END),0)[英语]
,ISNULL(MAX(CASE 科目 WHEN '物理' THEN 成绩 END),0)[物理]
,ISNULL(MAX(CASE 科目 WHEN '化学' THEN 成绩 END),0)[化学]
,ISNULL(MAX(CASE 科目 WHEN '地理' THEN 成绩 END),0)[地理]
,ISNULL(MAX(CASE 科目 WHEN '语文' THEN 成绩 END),0)[语文]
FROM
学生基本表
GROUP BY 姓名,年龄
--以下是SQL2005+的额外方式
SELECT 姓名,年龄,数学,英语,物理,化学,地理,语文
FROM 学生基本表
PIVOT(MAX(成绩)FOR 科目 IN([数学],[英语],[物理],[化学],[地理],[语文]))P