日期:2014-05-17  浏览次数:20538 次

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