读书人

行转列口气

发布时间: 2013-01-12 16:25:03 作者: rapoo

行转列语气
表内容 项目不确定有多少个
表内容
公司 项目 金额
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

读书人网 >SQL Server

热点推荐