数据横转列查询,不要用游标
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) 内存,
MAX(case when 类型='显卡' then convert(varchar,编号)+型号 else null end) 显卡
from tb
group by 用户
having 用户 is not null
[解决办法]
自己保存的一个SQL,你可以参考一下。
DECLARE @ColumnNames VARCHAR(3000)
DECLARE @a VARCHAR(3000)
SET @ColumnNames=''
SET @a=''
SELECT
@ColumnNames = @ColumnNames + '[' + 类型 + '],',@a=@a+ 'ISNULL([' + 类型 + '],0),'
FROM
(
SELECT DISTINCT 类型 FROM usrtable
) t ORDER BY t.类型
SET @ColumnNames= LEFT(@ColumnNames, LEN(@ColumnNames)-1)
SET @a= LEFT(@a, LEN(@a)-1)
DECLARE @selectSQL NVARCHAR(3000)
SET @selectSQL=' SELECT 用户,'+@a+' FROM (SELECT 用户,编号,型号,类型 FROM usrtable WITH(NOLOCK)) AS T
PIVOT (sum(型号+编号) FOR T.类型 in ('+@ColumnNames+')) AS s'
EXEC (@selectSQL)
[解决办法]
http://blog.csdn.net/peng13nannan/article/details/7751085
[解决办法]
这里有很多例子,请参考:
http://blog.csdn.net/hdhai9451/article/details/5026933
[解决办法]
sql 2005之后可以使用行专列函数~~~