sql server 行列转换

商品         分店           数量  
  --------------------------------------  
  电视         东门           100  
  电视         华强           150  
  冰箱         东门           50  
  冰箱         华强           80  
  ...           ...             ...  
   
  转化为:  
   
  商品         东门           华强     .....  
  -----------------------------------------      
  电视         100             150  
  冰箱         50               80  
   
  (请注意!分店数量不是固定的。)  
 
 
 
  Create   table   TEST  
  (商品 Nvarchar(10),  
    分店 Nvarchar(10),  
    数量 Int)  
  --插入数据  
  Insert   TEST   Values(N'电视',         N'东门',           100)  
  Insert   TEST   Values(N'电视',         N'华强',           150)  
  Insert   TEST   Values(N'冰箱',         N'东门',           50)  
  Insert   TEST   Values(N'冰箱',         N'华强',           80)  
  GO  
   
  --创建视图  
  declare   @dbname   sysname  
  set   @dbname=db_name()  
  exec('  
  create   view   v_qry  
  as  
  select   *   from   openrowset(''sqloledb'',''Trusted_Connection=yes;database='+@dbname+'''  
  ,''  
  Declare   @S Nvarchar(4000)  
  Set   @S=N''''Select   商品''''  
  Select   @S=@S+N'''',SUM(Case   When   分店=N''''''''''''+分店+N''''''''''''   Then   数量   Else   0   End)   As   N''''''''''''+分店+''''''''''''''''    
  from   (Select   Distinct   分店   from   TEST   )   A   Order   By   分店  
  Select   @S=@S+N''''   from   TEST   Group   By   商品   Order   By   商品''''  
  EXEC(@S)'')')  
  go  
   
  --调用视图实现查询  
  select   *   from   v_qry  
  go  
   
  --删除测试  
  drop   table   test  
  drop   view   v_qry  
   
  /*--结果  
  商品                   东门                     华强                      
  ----------   -----------   -----------    
  冰箱                   50                     80  
  电视                   100                   150  
   
  (所影响的行数为   2   行)  
  --*/ 

你可能感兴趣的:(sql server 行列转换)