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