使用T-SQL案例声明汇总报告数据

时间:2009-10-15 17:18:33

标签: sql-server sql-server-2005 tsql

我想使用ageaccountage group在Reporting Services中创建一个简单的摘要报告,如下所示:

SELECT AGE,COUNT(ACCOUNT)AS TOTALCASES, 
       'AGEGRP' =CASE WHEN AGE <=5 THEN 'AGE 0 TO 5'
                      WHEN AGE >=6 THEN 'AGE 6 AND OLDER'
                 END
FROM MAIN 
GROUP BY 'AGEGRP'

当我在SQL Server Management Studio中运行时,收到错误消息:

Msg 164, Level 15, State 1, Line 1 Each GROUP BY expression must contain 
at least one column that is not an outer reference.

有人可以建议一种方法来生成汇总数据,计算帐号,按age 0 to 5age 6 and older汇总吗?

3 个答案:

答案 0 :(得分:3)

如果按AGEGRP分组

,则选择列表中不能包含“年龄”

尝试:

DECLARE @YourTable table (age int, account int)
insert into @YourTable values (1,40)
insert into @YourTable values (2,40)
insert into @YourTable values (3,40)
insert into @YourTable values (4,40)
insert into @YourTable values (5,40)
insert into @YourTable values (6,40)
insert into @YourTable values (7,40)
insert into @YourTable values (8,40)

SELECT
    COUNT(ACCOUNT)AS TOTALCASES, AGEGRP
    FROM (SELECT
              AGE,ACCOUNT, CASE
                               WHEN AGE <=5 THEN 'AGE 0 TO 5'
                               WHEN AGE >=6 THEN 'AGE 6 AND OLDER'
                           END AS AGEGRP
              FROM @YourTable 
         )dt
    GROUP BY AGEGRP

输出:

TOTALCASES  AGEGRP
----------- ---------------
5           AGE 0 TO 5
3           AGE 6 AND OLDER

(2 row(s) affected)

答案 1 :(得分:0)

您可以执行内部查询,例如KM显示,也可以重复您想要分组的表达式:

SELECT 
  AGE,
  COUNT(ACCOUNT) AS TOTALCASES, 
  CASE 
    WHEN AGE <=5 THEN 'AGE 0 TO 5'
    ELSE 'AGE 6 AND OLDER'
  END AS AGEGRP
FROM 
  MAIN 
GROUP BY 
  CASE 
    WHEN AGE <=5 THEN 'AGE 0 TO 5'
    ELSE 'AGE 6 AND OLDER'
  END

答案 2 :(得分:0)

在最终结果集中不可能有AGE。我觉得你在一起混合两个请求。采用KM的解决方案,您可以获得内部结果,也可以获得没有AGE列的外部结果。

编辑:KM刚刚编辑了他的回复,我也是:) :)无论如何,我引用了以下两个结果:

  1. 从年龄组选择年龄,(案例...结束)作为年龄组
  2. 选择年龄组,计数(*)作为案例(选择年龄,(案例......结束)作为年龄组)t group by agegroup