表结构:
ID-----费用名称-----金额-----时间
1------水费-----------10---------时间
2------水费-----------15---------时间
3------电费----------13----------时间
4------水费-----------12--------时间
5------电费----------20---------时间
...........
N-----水费---------22------------时间
期望的查询结果:
------水费---------------电费-------------XX费
sum(水费)----sum(电费)------sum(xx费)
表中不仅局限于2种费用,可能还有其他费用。
期望的查询是,让费用名称做表头,查询出相应费用的和
在此先谢谢各位了~~~

------解决思路----------------------
DECLARE @sql varchar(max)
DECLARE @columns varchar(max)
SET @columns = ''
SELECT @columns = @columns+',['+费用名称+']'
FROM table1
GROUP BY 费用名称
SET @columns = STUFF(@columns,1,1,'')
SET @sql = '
SELECT *
FROM (
SELECT 费用名称,
SUM(金额) AS 金额
FROM table1
GROUP BY 费用名称
) t
PIVOT (
MAX(金额)
FOR 费用名称 IN ('+@columns+')
) p'
--PRINT @sql
EXEC(@sql)
------解决思路----------------------
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL=''
SELECT @SQL=@SQL+',SUM(CASE WHEN 费用名称='''+费用名称+''' THEN 金额 END)['+费用名称+']'
FROM TB GROUP BY 费用名称
SET @SQL='SELECT '+STUFF(@SQL,1,1,'')+'FROM TB'
PRINT @SQL
EXEC(@SQL)
--静态
SELECT
SUM(CASE WHEN 费用名称='电费' THEN 金额 END)[电费]
,SUM(CASE WHEN 费用名称='水费' THEN 金额 END)[水费]
FROM TB