csdn  一个网友写的....

sql 交叉查询create table #TmpA
sql 交叉查询(
sql 交叉查询Cat2 
varchar(32),
sql 交叉查询Cat3 
varchar(32),
sql 交叉查询Order_year 
int,
sql 交叉查询Order_month 
int,
sql 交叉查询Amount_A 
decimal(18,2),
sql 交叉查询Amount_B  
decimal(18,2)
sql 交叉查询)
sql 交叉查询
--插入数据
sql 交叉查询
Insert #TmpA Values('K''S'2005210100)
sql 交叉查询
Insert #TmpA Values('K''S'2005320200)
sql 交叉查询
Insert #TmpA Values('K''S'2005430300)
sql 交叉查询
Insert #TmpA Values('K''S'2005540400)
sql 交叉查询
Insert #TmpA Values('K''S'2005650500)
sql 交叉查询
Insert #TmpA Values('K''S'2005760600)
sql 交叉查询
Insert #TmpA Values('K''B'2005210100)
sql 交叉查询
Insert #TmpA Values('K''B'2005320200)
sql 交叉查询
Insert #TmpA Values('K''B'2005430300)
sql 交叉查询
Insert #TmpA Values('K''B'2005540400)
sql 交叉查询
Insert #TmpA Values('K''B'2005650500)
sql 交叉查询
Insert #TmpA Values('K''B'2005760600)
sql 交叉查询
sql 交叉查询
//数据查询
sql 交叉查询
sql 交叉查询
Declare @Sql1 Nvarchar(4000)
sql 交叉查询
Declare @Sql2 Nvarchar(4000)
sql 交叉查询
Set @Sql1='Select DIstinct Cat2,Cat3,''Amount_A'' As amount,'
sql 交叉查询
Set @Sql2='Select DIstinct Cat2,Cat3,''Amount_B'' As amount,'
sql 交叉查询
sql 交叉查询
sql 交叉查询
Select @Sql1=@Sql1+'(Select Amount_A from #TmpA Where Order_month='+Rtrim(Order_month)+' And Cat2=A.Cat2 And Cat3=A.Cat3) As '''+Rtrim(Order_month)+N''','
sql 交叉查询
from (Select Distinct Order_month from #TmpA ) A Order By Order_month
sql 交叉查询
sql 交叉查询
Select @Sql2=@Sql2+'(Select Amount_B from #TmpA Where Order_month='+Rtrim(Order_month)+' And Cat2=A.Cat2 And Cat3=A.Cat3) As '''+Rtrim(Order_month)+N''','
sql 交叉查询
from (Select Distinct Order_month from #TmpA ) A Order By Order_month
sql 交叉查询
sql 交叉查询
sql 交叉查询
Select @Sql1=Left(@Sql1,Len(@Sql1)-1)+'from #TmpA A Union All '+Left(@Sql2,Len(@Sql2)-1)+'from #TmpA A Order By Cat2,Cat3 Desc'
sql 交叉查询
EXEC(@Sql1)


     Sql1 生成的sql 
   
sql 交叉查询Select DIstinct Cat2,Cat3,'Amount_A' As amount,
sql 交叉查询(
Select Amount_A from #TmpA Where Order_month=2 And Cat2=A.Cat2 And Cat3=A.Cat3) As '2月',
sql 交叉查询(
Select Amount_A from #TmpA Where Order_month=3 And Cat2=A.Cat2 And Cat3=A.Cat3) As '3月',
sql 交叉查询(
Select Amount_A from #TmpA Where Order_month=4 And Cat2=A.Cat2 And Cat3=A.Cat3) As '4月',
sql 交叉查询(
Select Amount_A from #TmpA Where Order_month=5 And Cat2=A.Cat2 And Cat3=A.Cat3) As '5月',
sql 交叉查询(
Select Amount_A from #TmpA Where Order_month=6 And Cat2=A.Cat2 And Cat3=A.Cat3) As '6月',
sql 交叉查询(
Select Amount_A from #TmpA Where Order_month=7 And Cat2=A.Cat2 And Cat3=A.Cat3) As '7月',
sql 交叉查询(
Select Amount_A from #TmpA Where Order_month=9 And Cat2=A.Cat2 And Cat3=A.Cat3) As '9月'
sql 交叉查询
from #TmpA A Union All 
sql 交叉查询
sql 交叉查询
Select DIstinct Cat2,Cat3,'Amount_B' As amount,
sql 交叉查询(
Select Amount_B from #TmpA Where Order_month=2 And Cat2=A.Cat2 And Cat3=A.Cat3) As '2月',
sql 交叉查询(
Select Amount_B from #TmpA Where Order_month=3 And Cat2=A.Cat2 And Cat3=A.Cat3) As '3月',
sql 交叉查询(
Select Amount_B from #TmpA Where Order_month=4 And Cat2=A.Cat2 And Cat3=A.Cat3) As '4月',
sql 交叉查询(
Select Amount_B from #TmpA Where Order_month=5 And Cat2=A.Cat2 And Cat3=A.Cat3) As '5月',
sql 交叉查询(
Select Amount_B from #TmpA Where Order_month=6 And Cat2=A.Cat2 And Cat3=A.Cat3) As '6月',
sql 交叉查询(
Select Amount_B from #TmpA Where Order_month=7 And Cat2=A.Cat2 And Cat3=A.Cat3) As '7月',
sql 交叉查询(
Select Amount_B from #TmpA Where Order_month=9 And Cat2=A.Cat2 And Cat3=A.Cat3) As '9月'
sql 交叉查询
from #TmpA A Order By Cat2,Cat3 Desc


我写的.

 
sql 交叉查询create table #TmpA
sql 交叉查询(
sql 交叉查询学生姓名 
varchar(32),
sql 交叉查询作业标题  
VARCHAR(30),
sql 交叉查询分数 
decimal(18,2),
sql 交叉查询
sql 交叉查询)
sql 交叉查询
sql 交叉查询
--插入数据
sql 交叉查询
Insert #TmpA Values'S',  '作业1'10)
sql 交叉查询
Insert #TmpA Values'S''作业2'20)
sql 交叉查询
Insert #TmpA Values'S',  '作业3'30)
sql 交叉查询
Insert #TmpA Values'S',  '作业4'40)
sql 交叉查询
sql 交叉查询
sql 交叉查询
sql 交叉查询
sql 交叉查询
Insert #TmpA Values'B''作业1'10)
sql 交叉查询
Insert #TmpA Values'B',  '作业2'20)
sql 交叉查询
Insert #TmpA Values'B',  '作业3'30)
sql 交叉查询
Insert #TmpA Values'B',  '作业4'40)
sql 交叉查询
Insert #TmpA Values'B',  '作业6'40)
sql 交叉查询
sql 交叉查询
--数据查询
sql 交叉查询

sql 交叉查询
Declare @Sql1 Nvarchar(4000)
sql 交叉查询
Declare @Sql2 Nvarchar(4000)
sql 交叉查询
Set @Sql1='Select DIstinct 学生姓名,'
sql 交叉查询
Set @Sql2='(Select 分数 from #TmpA Where 作业标题='+'''+作业标题+'''
sql 交叉查询
sql 交叉查询
sql 交叉查询
Select @Sql1=@Sql1+'(Select 分数 from #TmpA Where 作业标题='''+作业标题 +''' And 学生姓名=A.学生姓名 ) As '''+作业标题+''','
sql 交叉查询
from (Select Distinct 作业标题 from #TmpA ) A Order By 作业标题
sql 交叉查询
sql 交叉查询
sql 交叉查询
sql 交叉查询
Select @Sql1=Left(@Sql1,Len(@Sql1)-1)+'from #TmpA A Order By 学生姓名 Desc'
sql 交叉查询
sql 交叉查询
sql 交叉查询
EXEC(@Sql1)
sql 交叉查询
sql 交叉查询
sql 交叉查询
sql 交叉查询 
DROP
sql 交叉查询
TABLE #TmpA
sql 交叉查询
 
   Sql1 生成的sql 
sql 交叉查询Select DIstinct 学生姓名,(Select 分数 from #TmpA Where 作业标题='作业1' And 学生姓名=A.学生姓名 ) As '作业1',(Select 分数 from #TmpA Where 作业标题='作业2' And 学生姓名=A.学生姓名 ) As '作业2',(Select 分数 from #TmpA Where 作业标题='作业3' And 学生姓名=A.学生姓名 ) As '作业3',(Select 分数 from #TmpA Where 作业标题='作业4' And 学生姓名=A.学生姓名 ) As '作业4',(Select 分数 from #TmpA Where 作业标题='作业6' And 学生姓名=A.学生姓名 ) As '作业6'from #TmpA A Order By 学生姓名 Desc


注意上边的那些引号...弄得我蛮头大的...

 

相关文章: