日期:2014-05-19  浏览次数:20428 次

100分! 在.NET版块没有找到答案 看看能不能在SQL语句上做处理显示
1以Pubs数据库authors为例用table实现绑定数据.  
2要求:实现作者的比较,根据用户选择的作者数量不同生成列.
3例如:如果用户选择了作者 "White "\ "Green "\ "Carson "就显示这三个作者的数据.  
4效果如:       au_Id             172-32-1176               213-46-8915                   238-46-8915
                    au_name         White                           Green                               Carson
                    au_fname       Johnson                       MarJorie                         Cheryl
                    phone             408   496-7223             415   986-7020                 415   548-7723
                    address         10932   Bigge   Rd.       309   63rd   St.   #411       589   Darwin   Ln.
                    city               Menlo   Park                 Oakland                           Berkeley
                    ....               ...                               ...                                   ....
下面类似显示   authors表有多少个数据字段形成多少个比较行(也就是说行是一定的)
我用的工具是VS2003


------解决方案--------------------
没看懂,你给个具体的数据和想要得到的结果吧.
------解决方案--------------------
Use Pubs
GO
--建立存儲過程
Create Procedure Get_Authors(@au_lname Varchar(100))
As
Begin
Declare @S1 Nvarchar(4000), @S2 Nvarchar(4000)
Select @S1 = N ' Select ColName As au_Id ', @S2 = ' '

Select @S1 = @S1 + ' , Max(Case au_id When N ' ' '+ au_id + N ' ' ' Then Data Else ' ' ' ' End) As [ ' + au_id + '] '
From authors Where CharIndex( ', ' + au_lname + ', ' , ', ' + @au_lname + ', ') > 0
Group By au_id

Select @S2 = @S2 + ' Union All Select ' + Rtrim(ColID) + ' As ColID, au_id, N ' ' ' + Name + N ' ' ' As ColName, Rtrim( ' + Name + ') As Data From authors '
From SySColumns Where ID = OBJECT_ID( 'authors ') And Name != 'au_id ' Order By ColID

Select @S1 = @S1 + ' From ( ' + Stuff(@S2, 1, 11, ' ') + N ') A Group By ColID, ColName Order By ColID '
EXEC(@S1)
End
GO
--測試
EXEC Get_Authors 'White,Green,Carson '
GO
--刪除測試環境
Drop Procedure Get