34,592
社区成员
发帖
与我相关
我的任务
分享
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2011-04-22 15:13:00
-- 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 Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([编号] int,[姓名] varchar(4),[性别] varchar(2),[种植产品] varchar(4))
insert [tb]
select 1,'王一','男','苹果' union all
select 1,'王二','女','梨子' union all
select 2,'张一','女','苹果' union all
select 3,'宋一','女','苹果' union all
select 3,'宋二','男','梨子'
--------------开始查询--------------------------
select
编号,
MAX(case id when 1 then 姓名 else '' end) as 姓名1,
MAX(case id when 1 then 种植产品 else '' end) as 姓名1,
MAX(case id when 2 then 姓名 else '' end) as 姓名2,
MAX(case id when 2 then 种植产品 else '' end) as 种植产品2
from
(select ID=ROW_NUMBER()over(partition by 编号 order by GETDATE()),* from tb)t
group by
编号
----------------结果----------------------------
/* 编号 姓名1 姓名1 姓名2 种植产品2
----------- ---- ---- ---- -----
1 王一 苹果 王二 梨子
2 张一 苹果
3 宋一 苹果 宋二 梨子
(3 行受影响)
*/
select 编号, max(case when no=1 then 姓名 end) [姓名一],max(case when no=1 then 种植产品 end) [种植产品一],
max(case when no=2 then 姓名 end) [姓名二],max(case when no=2 then 种植产品 end) [种植产品二]
from (select row_number() over(partition by 编号 order by getdate())no,* from tb) a
group by 编号