select '项目'项目, p1=max(case when 项目='P1' then 收入 else 0 end ), p2=max(case when 项目='P2' then 收入 else 0 end ), p3=max(case when 项目='P3' then 收入 else 0 end ) from tb
--> 生成测试数据表:tbIf not object_id('[tb]') is null Drop table [tb] Go Create table [tb]([项目] nvarchar(2),[收入] int) Insert [tb] Select N'P1',10 union all Select N'p2',20 union all Select N'p3',30 Go --Select * from [tb]-->SQL查询如下: select 项目='收入',* from tb pivot(max(收入) for 项目 in(p1,p2,p3))b /* 项目 p1 p2 p3 收入 10 20 30 */
if not object_id('tb') is null drop table tb Go Create table tb([项目] nvarchar(2),[收入] int) Insert tb select N'P1',10 union all select N'p2',20 union all select N'p3',30 Go select '收入'项目, p1=max(case when 项目='P1' then 收入 else 0 end ), p2=max(case when 项目='P2' then 收入 else 0 end ), p3=max(case when 项目='P3' then 收入 else 0 end ) from tb /* 项目 p1 p2 p3 ---- ----------- ----------- ----------- 收入 10 20 30(1 行受影响) */
---sql2000动态If not object_id('[tb]') is null Drop table [tb] Go Create table [tb]([项目] varchar(2),[收入] int) Insert [tb] Select 'P1',10 union all Select 'p2',20 union all Select 'p3',30 Go declare @str varchar(400) set @str=''select @str=@str+','+项目+'=max(case when 项目='''+项目+''' then 收入 else 0 end )' from (select distinct 项目 from tb)tset @str='select ''收入''as 项目'+@str+' from tb ' exec(@str)项目 P1 p2 p3 ---- ----------- ----------- ----------- 收入 10 20 30(1 行受影响)
---------------------------------------------------------------- -- Author :fredrickhu(小F,向高手学习) -- Date :2009-09-06 22:05:39 -- Version: -- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) -- Nov 24 2008 13:01:59 -- Copyright (c) 1988-2005 Microsoft Corporation -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3) -- ---------------------------------------------------------------- --> 测试数据:[tb] if object_id('[tb]') is not null drop table [tb] go create table [tb]([项目] varchar(2),[收入] int) insert [tb] select 'P1',10 union all select 'p2',20 union all select 'p3',30 --------------开始查询-------------------------- select '项目'项目, p1=max(case when 项目='P1' then 收入 else 0 end ), p2=max(case when 项目='P2' then 收入 else 0 end ), p3=max(case when 项目='P3' then 收入 else 0 end ) from tb ----------------结果---------------------------- /* 项目 p1 p2 p3 ---- ----------- ----------- ----------- 项目 10 20 30(1 行受影响) */
--> 生成测试数据表:tbIf not object_id('[tb]') is null Drop table [tb] Go Create table [tb]([项目] nvarchar(2),[收入] int) Insert [tb] Select N'P1',10 union all Select N'p2',20 union all Select N'p3',30 Go --Select * from [tb]-->SQL查询如下: --05动态 declare @s varchar(max) select @s=isnull(@s+',','')+quotename(项目) from tb group by 项目 exec('select 项目=''收入'',* from tb pivot(max(收入) for 项目 in('+@s+'))b') /* 项目 P1 p2 p3 ---- ----------- ----------- ----------- 收入 10 20 30(1 行受影响) */
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB GO CREATE TABLE TB( PRO VARCHAR(50), MON INT ) INSERT INTO TB SELECT 'P1', 10 UNION ALL SELECT 'p2', 20 UNION ALL SELECT 'p3', 30 UNION ALL SELECT 'P3', 10 UNION ALL SELECT 'p1', 22 UNION ALL SELECT 'p2', 33 DECLARE @STR VARCHAR(8000) SELECT @STR=ISNULL(@STR+',SUM(CASE WHEN PRO=''','SELECT SUM(CASE WHEN PRO=''') +PRO+''' THEN MON ELSE 0 END)'+PRO FROM TB GROUP BY PRO EXEC (@STR+' FROM TB')/* 32 53 40 */
p1=max(case when 项目='P1' then 收入 else 0 end ),
p2=max(case when 项目='P2' then 收入 else 0 end ),
p3=max(case when 项目='P3' then 收入 else 0 end )
from tb
Drop table [tb]
Go
Create table [tb]([项目] nvarchar(2),[收入] int)
Insert [tb]
Select N'P1',10 union all
Select N'p2',20 union all
Select N'p3',30
Go
--Select * from [tb]-->SQL查询如下:
select 项目='收入',*
from tb
pivot(max(收入) for 项目 in(p1,p2,p3))b
/*
项目 p1 p2 p3
收入 10 20 30
*/
-->Title:生成测试数据
-->Author:wufeng4552【水族杰纶】
-->Environment: MSSQL2005
-->Date:2009-09-06
-->==============================================
if not object_id('tb') is null
drop table tb
Go
Create table tb([项目] nvarchar(2),[收入] int)
Insert tb
select N'P1',10 union all
select N'p2',20 union all
select N'p3',30
Go
select '收入'项目,
p1=max(case when 项目='P1' then 收入 else 0 end ),
p2=max(case when 项目='P2' then 收入 else 0 end ),
p3=max(case when 项目='P3' then 收入 else 0 end )
from tb
/*
项目 p1 p2 p3
---- ----------- ----------- -----------
收入 10 20 30(1 行受影响)
*/
---sql2000动态If not object_id('[tb]') is null
Drop table [tb]
Go
Create table [tb]([项目] varchar(2),[收入] int)
Insert [tb]
Select 'P1',10 union all
Select 'p2',20 union all
Select 'p3',30
Go
declare @str varchar(400)
set @str=''select @str=@str+','+项目+'=max(case when 项目='''+项目+''' then 收入 else 0 end )'
from (select distinct 项目 from tb)tset @str='select ''收入''as 项目'+@str+' from tb '
exec(@str)项目 P1 p2 p3
---- ----------- ----------- -----------
收入 10 20 30(1 行受影响)
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-09-06 22:05:39
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([项目] varchar(2),[收入] int)
insert [tb]
select 'P1',10 union all
select 'p2',20 union all
select 'p3',30
--------------开始查询--------------------------
select
'项目'项目,
p1=max(case when 项目='P1' then 收入 else 0 end ),
p2=max(case when 项目='P2' then 收入 else 0 end ),
p3=max(case when 项目='P3' then 收入 else 0 end )
from
tb
----------------结果----------------------------
/* 项目 p1 p2 p3
---- ----------- ----------- -----------
项目 10 20 30(1 行受影响)
*/
Drop table [tb]
Go
Create table [tb]([项目] nvarchar(2),[收入] int)
Insert [tb]
Select N'P1',10 union all
Select N'p2',20 union all
Select N'p3',30
Go
--Select * from [tb]-->SQL查询如下:
--05动态
declare @s varchar(max)
select @s=isnull(@s+',','')+quotename(项目) from tb group by 项目
exec('select 项目=''收入'',* from tb pivot(max(收入) for 项目 in('+@s+'))b')
/*
项目 P1 p2 p3
---- ----------- ----------- -----------
收入 10 20 30(1 行受影响)
*/
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(
PRO VARCHAR(50),
MON INT
)
INSERT INTO TB
SELECT 'P1', 10 UNION ALL
SELECT 'p2', 20 UNION ALL
SELECT 'p3', 30 UNION ALL
SELECT 'P3', 10 UNION ALL
SELECT 'p1', 22 UNION ALL
SELECT 'p2', 33 DECLARE @STR VARCHAR(8000)
SELECT @STR=ISNULL(@STR+',SUM(CASE WHEN PRO=''','SELECT SUM(CASE WHEN PRO=''')
+PRO+''' THEN MON ELSE 0 END)'+PRO
FROM TB
GROUP BY PRO
EXEC (@STR+' FROM TB')/*
32 53 40
*/