首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

经典转换有关问题,散分了

2013-07-09 
经典转换问题,散分了 !当前数据:AIDAnameIsOpen1IsOpen2CS1CS21F3C黄浦01家乐福沃尔玛27B9徐汇10家乐福沃

经典转换问题,散分了 !
当前数据:


AID      Aname   IsOpen1  IsOpen2   CS1        CS2       
1F3C     黄浦     0        1      家乐福     沃尔玛     
27B9     徐汇     1        0      家乐福     沃尔玛     
30AF     卢湾     1        1      家乐福     沃尔玛     


想要结果:

AID      Aname    家乐福   沃尔玛                    
1F3C      黄浦      0        1                  
27B9      徐汇      1        0                
30AF      卢湾      1        1    
    
   
[解决办法]

create table lee
(AID varchar(10), Aname varchar(10), 
 IsOpen1 int, IsOpen2 int, 
 CS1 varchar(10), CS2 varchar(10))

insert into lee
 select '1F3C', '黄浦', 0, 1, '家乐福', '沃尔玛' union all
 select '27B9', '徐汇', 1, 0, '家乐福', '沃尔玛' union all
 select '30AF', '卢湾', 1, 1, '家乐福', '沃尔玛'


select AID,Aname,[家乐福],[沃尔玛]
from
(select AID,Aname,CS1 'CS',IsOpen1 'IsOpen' from lee
 union all
 select AID,Aname,CS2 'CS',IsOpen2 'IsOpen' from lee) t
pivot(max(IsOpen) for CS in([家乐福],[沃尔玛])) p

/*
AID        Aname      家乐福         沃尔玛
---------- ---------- ----------- -----------
1F3C       黄浦         0           1
30AF       卢湾         1           1
27B9       徐汇         1           0



(3 row(s) affected)
*/


[解决办法]
方法2,

create table lee
(AID varchar(10), Aname varchar(10), 
 IsOpen1 int, IsOpen2 int, 
 CS1 varchar(10), CS2 varchar(10))

insert into lee
 select '1F3C', '黄浦', 0, 1, '家乐福', '沃尔玛' union all
 select '27B9', '徐汇', 1, 0, '家乐福', '沃尔玛' union all
 select '30AF', '卢湾', 1, 1, '家乐福', '沃尔玛'


declare @tsql varchar(6000)

select @tsql='select AID,Aname,'
            +'IsOpen1 '''+(select top 1 CS1 from lee)+''','
            +'IsOpen2 '''+(select top 1 CS2 from lee)+''' '
            +' from lee '

exec(@tsql)

/*
AID        Aname      家乐福         沃尔玛
---------- ---------- ----------- -----------
1F3C       黄浦         0           1
27B9       徐汇         1           0
30AF       卢湾         1           1

(3 row(s) affected)
*/

热点排行