首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

行转列口气

2013-01-12 
行转列语气表内容项目不确定有多少个 表内容公司 项目金额a房费100a房费100a车费100b车费100b车费100b门费

行转列语气
表内容  项目不确定有多少个 
表内容
公司 项目   金额
a    房费   100
a    房费   100
a    车费   100
b    车费   100
b    车费   100
b    门费   500
生成内容
公司  房费  车费 门费 汇总
a     200    100  0    300
b     0     200  500   700
[解决办法]

--CREATE TABLE huang (公司 VARCHAR(10), 项目 VARCHAR(10),  金额 INT )
--INSERT INTO huang 
--SELECT 'a'  ,  '房费',   100
--UNION ALL SELECT 'a'  ,  '房费',   100
--UNION ALL SELECT 'a'  ,  '车费',   100
--UNION ALL SELECT 'b'  ,  '车费',   100
--UNION ALL SELECT 'b'  ,  '车费',   100
--UNION ALL SELECT 'b'   , '门费',   500
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT  @s = @s + ',' + QUOTENAME([项目]) + '=max(case when [项目]='
        + QUOTENAME(项目, '''') + ' then [金额] else 0 end)'
FROM    huang
GROUP BY [项目]
EXEC('select [公司]'+@s+' from huang group by [公司]') 

/*
公司         车费          房费          门费
---------- ----------- ----------- -----------
a          100         100         0
b          100         0           500

(2 行受影响)
*/


[解决办法]
忘了还有个汇总,bbbbbben 楼主说项目不确定,你那个不能用的
--CREATE TABLE huang (公司 VARCHAR(10), 项目 VARCHAR(10),  金额 INT )
--INSERT INTO huang 
--SELECT 'a'  ,  '房费',   100
--UNION ALL SELECT 'a'  ,  '房费',   100
--UNION ALL SELECT 'a'  ,  '车费',   100
--UNION ALL SELECT 'b'  ,  '车费',   100
--UNION ALL SELECT 'b'  ,  '车费',   100
--UNION ALL SELECT 'b'   , '门费',   500
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT  @s = @s + ',' + QUOTENAME([项目]) + '=max(case when [项目]='
        + QUOTENAME(项目, '''') + ' then [金额] else 0 end)'
FROM    huang


GROUP BY [项目]
EXEC('select [公司]'+@s+',[汇总]=sum(金额)  from huang group by [公司]') 

/*
公司         车费          房费          门费          汇总
---------- ----------- ----------- ----------- -----------
a          100         100         0           300
b          100         0           500         700

(2 行受影响)
*/

--DROP TABLE test

热点排行
Bad Request.