我有一张表: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
内有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
(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
*/