当前位置: 代码迷 >> Sql Server >> 一个SQL查询统计语句,多谢各位了
  详细解决方案

一个SQL查询统计语句,多谢各位了

热度:106   发布时间:2016-04-24 09:04:44.0
求助一个SQL查询统计语句,谢谢各位了
表结构:
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
  相关解决方案