资源描述:
《用简洁的sql语句写交叉表》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、用简洁的SQL语句写交叉表SQL交叉表实例很简单的一个东西,见网上好多朋友问“怎么实现交叉表?”,以下是我写的一个例子,数据库基于SQLSERVER2000。--======================================================--交叉表实例--======================================================建表:在查询分析器里运行:CREATETABLE[Test]([id][int]IDENTITY(1,1)NOTNULL,[name][nvarchar](50)COLLATEChinese_PR
2、C_CI_ASNULL,[subject][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL,[Source][numeric](18,0)NULL)ON[PRIMARY]GOINSERTINTO[test]([name],[subject],[Source])values(N'张三',N'语文',60)INSERTINTO[test]([name],[subject],[Source])values(N'李四',N'数学',70)INSERTINTO[test]([name],[subject],[Source])values(N'王五',N'英语'
3、,80)INSERTINTO[test]([name],[subject],[Source])values(N'王五',N'数学',75)INSERTINTO[test]([name],[subject],[Source])values(N'王五',N'语文',57)INSERTINTO[test]([name],[subject],[Source])values(N'李四',N'语文',80)INSERTINTO[test]([name],[subject],[Source])values(N'张三',N'英语',100)Go交叉表语句的实现:--用于:交叉表的列数是确定的selec
4、tname,sum(casesubjectwhen'数学'thensourceelse0end)as'数学',sum(casesubjectwhen'英语'thensourceelse0end)as'英语',sum(casesubjectwhen'语文'thensourceelse0end)as'语文'fromtestgroupbyname--用于:交叉表的列数是不确定的declare@sqlvarchar(8000)set@sql='selectname,'select@sql=@sql+'sum(casesubjectwhen'''+subject+'''thensourceels
5、e0end)as'''+subject+''','from(selectdistinctsubjectfromtest)asaselect@sql=left(@sql,len(@sql)-1)+'fromtestgroupbyname'exec(@sql)go