我有一张表:food
内有2个字段:foodname,foodtype
设计如下
foodname   foodtype
食物1         1
食物2         2
食物3         3
食物4         2
食物5         1
食物6         3
现在需要写句SQL语句来实现一个效果
既将foodtype当做字段,下面放着该字段所关联的内容
  1       2       3
食物1  食物2    食物3
食物5  食物2    食物6

解决方案 »

  1.   

    Create Table food
    (foodname Nvarchar(100),
     foodtype Int)Insert food Select N'食物1',         1
    Union All Select N'食物2',         2
    Union All Select N'食物3',         3
    Union All Select N'食物4',         2
    Union All Select N'食物5',         1
    Union All Select N'食物6',         3
    GO
    Select ID = Identity(Int, 1, 1), * Into #T1 From food
    Select OrderID = (Select Count(*) From #T1 Where foodtype = A.foodtype And ID <= A.ID), * Into #T2 From #T1 A--如果foodtype固定只有1 2 3三種
    Select 
    Max(Case foodtype When 1 Then foodname Else '' End) As [1],
    Max(Case foodtype When 2 Then foodname Else '' End) As [2],
    Max(Case foodtype When 3 Then foodname Else '' End) As [3]
    From
    #T2
    Group By
    OrderID--如果foodtype不固定
    Declare @S Varchar(8000)
    Select @S = ''
    Select @S = @S + ', Max(Case foodtype When ' + Rtrim(foodtype) + ' Then foodname Else '''' End) As [' + Rtrim(foodtype) + ']' 
    From food Group By foodtype
    Select @S = 'Select ' + Stuff(@S, 1, 1, '') + ' From #T2 Group By OrderID'
    EXEC(@S)Drop Table #T1, #T2
    GO
    Drop Table food
    --Result
    /*
    1 2 3
    食物1 食物2 食物3
    食物5 食物4 食物6
    */