日期:2014-05-16  浏览次数:20511 次

求大神出个行转列的方子
本帖最后由 z650816 于 2014-03-12 15:22:23 编辑
集数        词语        出现次数
第1集      人物        37
第1集      有些        35
第1集      白天        35
第2集      担心        3
第2集      放开        3
第2集      不行        3
第3集      超数        2
第3集      程度        2
第3集      穿衣服     2
第3集      拜拜        2


想要结果
第1集             第2集           第3集
人物37           担心3              超数2
有些35           放开3              程度2
白天35           不行3              穿衣服2
NULL             NULL              拜拜2
------解决方案--------------------
----------------------------------------------------------------
-- Author  :fredrickhu(小F,向高手学习)
-- Date    :2014-03-12 15:38:34
-- Verstion:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
-- Jul  9 2008 14:43:34 
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go 
create table [tb]([集数] varchar(5),[词语] varchar(6),[出现次数] int)
insert [tb]
select '第1集','人物',37 union all
select '第1集','有些',35 union all
select '第1集','白天',35 union all
select '第2集','担心',3 union all
select '第2集','放开',3 union all
select '第2集','不行',3 union all
select '第3集','超数',2 union all
select '第3集','程度',2 union all
select '第3集','穿衣服',2 union all
select '第3集','拜拜',2
--------------开始查询--------------------------
;WITH f AS 
(
SELECT px=ROW_NUMBER()OVER(PARTITION BY 集数 ORDER BY GETDATE()),* FROM tb 
)

SELECT
px, 
MAX(CASE WHEN 集数='第1集'  THEN 词语+LTRIM(出现次数) ELSE NULL END) AS 第1集,
MAX(CASE WHEN 集数='第2集'  THEN 词语+LTRIM(出现次数) ELSE NULL END) AS 第2集