我想使用age
,account
和age 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 5
和age 6 and older
汇总吗?
答案 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刚刚编辑了他的回复,我也是:) :)无论如何,我引用了以下两个结果: