日期:2014-05-17  浏览次数:20507 次

数据横转列查询,不要用游标
Id 编号  型号      类型      用户     商家
1 1001 黑金刚 内存 小黄 畅能科技
2 1002 七彩虹 主板 小黄 畅能科技
3 1003 速龙 cpu 小黄 畅能科技
4 1004 西数160G 硬盘 小黄 畅能科技
5 1005 威刚 内存 小李 昌泰科技
6 1006 三星 硬盘 小李 昌泰科技
7 1007 双敏 显卡 小李 昌泰科技
8 1008 英特尔 cpu 小李 昌泰科技
9 1009 双敏 主板 小李 昌泰科技
10 1010 金士顿 内存 NULL 昌泰科技
我要得到如下结果 
  用户   Cpu          主板          硬盘            内存        显卡
  小黄   1003速龙      1002七彩虹    1004西数160G   1001黑金刚  null
  小李   1008英特尔    1009双敏      1006三星       1005威刚   1007双敏

商家信息不用显示,用户为空的物品也不用显示,转换的列 固定 就为 用户 CPu 主板硬盘 内存 显卡 这5列
数据库查询横转列 行业数据

------解决方案--------------------

with tb(Id,编号,型号,类型,用户,商家)as(
select 1,1001,'黑金刚','内存','小黄','畅能科技' union 
select 2,1002,'七彩虹','主板','小黄','畅能科技' union 
select 3,1003,'速龙','cpu','小黄','畅能科技' union
select 4,1004,'西数160G','硬盘','小黄','畅能科技' union 
select 5,1005,'威刚','内存','小李','昌泰科技' union 
select 6,1006,'三星','硬盘','小李','昌泰科技' union 
select 7,1007,'双敏','显卡','小李','昌泰科技' union 
select 8,1008,'英特尔','cpu','小李','昌泰科技' union 
select 9,1009,'双敏','主板','小李','昌泰科技' union 
select 10,1010,'金士顿','内存',NULL,'昌泰科技')
select 用户,
MAX(case when 类型='CPU' then convert(varchar,编号)+型号 else null end) CPU,
MAX(case when 类型='主板' then convert(varchar,编号)+型号 else null end) 主板, 
MAX(case when 类型='硬盘' then convert(varchar,编号)+型号 else null end) 硬盘, 
MAX(case when 类型='内存' then convert(varchar,编号)+型号 else null end) 内存,