Select pinmin, shuyu , SUM(Case zhuangtai When '#' Then 1 Else 0 End) As [#] , SUM(Case zhuangtai When '$' Then 1 Else 0 End) As [$] , SUM(Case zhuangtai When '*' Then 1 Else 0 End) As [*] , SUM(Case zhuangtai When '@' Then 1 Else 0 End) As [@]
From table1 Group By zhuangtai-----你寫的這個語句,最後的Group By有點問題,應該是Group By pinmin, shuyu .這樣拼結出來的SQL語句就和你的那個是一樣的了。

解决方案 »

  1.   

    Select @S = @S + ' , SUM(Case zhuangtai When ''' + zhuangtai + ''' Then 1 Else 0 End) As ' + QUOTENAME(zhuangtai)
    From table1 Group By zhuangtai  --我的主要问题在这里上面这段语句是你写的.为什么会没错呢?
    PRINT @S后是得到@S是:
    Select pinmin, shuyu , SUM(Case zhuangtai When '#' Then 1 Else 0 End) As [#] , SUM(Case zhuangtai When '$' Then 1 Else 0 End) As [$] , SUM(Case zhuangtai When '*' Then 1 Else 0 End) As [*] , SUM(Case zhuangtai When '@' Then 1 Else 0 End) As [@]再加上后面一段FROM不是和我写的一样么.为什么我的有错.你的就没错
      

  2.   

    我後面加的是這段
    Select @S = @S + ' , Count(*) As zongshu From table1 Group By pinmin, shuyu Order By pinmin, shuyu'你加的是From table1 Group By zhuangtai)當然不一樣撒
      

  3.   

    我还是不理解.Select @S = @S + ' , SUM(Case zhuangtai When ''' + zhuangtai + ''' Then 1 Else 0 End) As ' + QUOTENAME(zhuangtai)
    From table1 Group By zhuangtai  --我的主要问题在这里那你能解释一下.上面这一段为什么会有一个From table1 Group By zhuangtai结尾?
    难道@S的结果不是:
    Select pinmin, shuyu , SUM(Case zhuangtai When '#' Then 1 Else 0 End) As [#] , SUM(Case zhuangtai When '$' Then 1 Else 0 End) As [$] , SUM(Case zhuangtai When '*' Then 1 Else 0 End) As [*] , SUM(Case zhuangtai When '@' Then 1 Else 0 End) As [@]
    From table1 Group By zhuangtai的结果....我的理解是这样的:
    @S = Select pinmin, shuyu , SUM(Case zhuangtai When '#' Then 1 Else 0 End) As [#] , SUM(Case zhuangtai When '$' Then 1 Else 0 End) As [$] , SUM(Case zhuangtai When '*' Then 1 Else 0 End) As [*] , SUM(Case zhuangtai When '@' Then 1 Else 0 End) As [@]然后
    Select @S From table1 Group By zhuangtai这条语句执行.
    然后@S是Select @S From table1 Group By zhuangtai的结果集.
    这个结果集再Select @S = @S + ' , Count(*) As zongshu From table1 Group By pinmin, shuyu Order By pinmin, shuyu'我知道自己理解有错.你能帮我分析一下过程吗..我真的有点晕.
      

  4.   

    就是你写的整个TSQL语句执行过程.
      

  5.   

    Select @S = @S + ' , SUM(Case zhuangtai When ''' + zhuangtai + ''' Then 1 Else 0 End) As ' + QUOTENAME(zhuangtai)
    From table1 Group By zhuangtai  
    這一段之後,@S的結果是
    Select pinmin, shuyu , SUM(Case zhuangtai When '#' Then 1 Else 0 End) As [#] , SUM(Case zhuangtai When '$' Then 1 Else 0 End) As [$] , SUM(Case zhuangtai When '*' Then 1 Else 0 End) As [*] , SUM(Case zhuangtai When '@' Then 1 Else 0 End) As [@]From table1 Group By zhuangtai  這一段是得到table1中所有的zhuangtai的。你可以分段將@S print出來看。Declare @S Varchar(8000)
    Select @S = 'Select pinmin, shuyu'
    Print @SSelect @S = @S + ' , SUM(Case zhuangtai When ''' + zhuangtai + ''' Then 1 Else 0 End) As ' + QUOTENAME(zhuangtai)
    From table1 Group By zhuangtai  --我的主要问题在这里
    Print @SSelect @S = @S + ' , Count(*) As zongshu From table1 Group By pinmin, shuyu Order By pinmin, shuyu'
    Print @S
    EXEC(@S)
    GO
      

  6.   

    有一点点明白了.
    Select @S = @S + ' , SUM(Case zhuangtai When ''' + zhuangtai + ''' Then 1 Else 0 End) As ' + QUOTENAME(zhuangtai)
    From table1 Group By zhuangtai  
    這一段之後,@S的結果是
    Select pinmin, shuyu , SUM(Case zhuangtai When '#' Then 1 Else 0 End) As [#] , SUM(Case zhuangtai When '$' Then 1 Else 0 End) As [$] , SUM(Case zhuangtai When '*' Then 1 Else 0 End) As [*] , SUM(Case zhuangtai When '@' Then 1 Else 0 End) As [@]From table1 Group By zhuangtai  這一段是得到table1中所有的zhuangtai的。也就是说From table1 Group By zhuangtai这一条语句是为上面的Select @S = @S + ' , SUM(Case zhuangtai When ''' + zhuangtai + ''' Then 1 Else 0 End) As ' + QUOTENAME(zhuangtai) SELECT 递归服务的..有一点点感觉了.谢谢..我再想想..太感谢了.