在 SQL 中使用参数进行 GROUP BY
我试图根据预定义的参数下拉列表以某种方式对报告进行分组。我希望能够根据部门或职位代码对我的报告的总工时或总工资进行小计。我已经创建了参数并且没有任何问题,我只是不确定是否可以使用这些参数来调用分组命令。以下是我想要的精神,但即使没有参数,GROUP BY 子句对我也不起作用。
SELECT EmployeeID, LastName, FirstName, Department, JobCode, PayRate, SUM(Hours) as "Total Hours", SUM(Pay) as "Total Pay"
FROM Employees
GROUP BY @GroupBy
在 SQL 方面,我确实是一个新手,所以非常感谢任何帮助。
谢谢。
I am trying to somehow group a report based on a drop-down list of parameters that is pre-defined. I want to be able to subtotal the Total Hours or Total Pay of my report based on Department or JobCode. I have created the parameters and have no problem with that, I just am not sure if it's possible to use those parameters to call out a grouping command. Below is the spirit of what I am wanting, but the GROUP BY clause doesn't work for me even without a parameter.
SELECT EmployeeID, LastName, FirstName, Department, JobCode, PayRate, SUM(Hours) as "Total Hours", SUM(Pay) as "Total Pay"
FROM Employees
GROUP BY @GroupBy
I am truly a novice when it comes to SQL, so any help is very much appreciated.
Thank You.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这个要求对我来说并不是 100% 清楚,但我想你会经历这样的事情:
要尝试这个设置:
显然,你想将
@groupBy
设置为'dept'< /code> 或任何其他值。
The requirement is not 100% clear to me, but I imagine your after something like this:
To be tried with this setup:
Obviously, you want to set
@groupBy
to either'dept'
or any other value.我认为您从根本上误解了 GROUP BY 的工作原理。
GROUPING 是将多行聚合在一起的一种方法。
如果您返回的任何字段不在
GROUP BY
中,您需要决定如何处理它们。您不能不对它们执行任何操作,因为每个组可能有多个值。它们必须被排除或聚合。要聚合它们,您需要决定使用什么函数(
MAX
、MIN
、SUM
、AVG
等)。如果您想要显示许多行,例如每个员工一行,但想要包含有关该员工所在部门的总计的一些信息,则需要使用子查询:
可能有一种方法可以动态地执行此操作,但这是一个非常糟糕的主意。
I think you are fundamentally misunderstanding how
GROUP BY
works.GROUPING is a way to aggregate many rows together.
If you return any fields not in the
GROUP BY
, you need to decide what to do with them. You can't NOT do anything with them because you could have multiple values per group. They must be either excluded or aggregated.To aggregate them, you need to decide what function to use (
MAX
,MIN
,SUM
,AVG
, etc).If you want to show many rows, say one per employee, but want to include some information about totals for that employee's department, you need to use a subquery:
There may be a way to do this dynamically but that is a pretty poor idea.
Group by
确实很简单。您必须在
group by
中列出 select 语句中包含的且未提供给聚合函数的每个字段。这就是为什么您不能在
select
中使用带有固定列列表的变量group by
。 (嗯,你可以在 mysql 中,但它有效地将虚拟any()
聚合应用于它们。)Group by
is simple really.You have to list in
group by
every field that is included in the select statement and not fed to an aggregate function.Which is why you can't have a variable
group by
with a fixed list of columns inselect
. (Well, you can in mysql, but it effectively applies virtualany()
aggregate to them.)您选择的任何未由聚合函数(SUM、MIN 等)之一使用的列都需要在
GROUP BY
子句中列出。例如,
这里有很好的例子: http://www.w3schools.com/sql/sql_groupby.asp< /a>
Any column you are selecting that are not used by one of the aggregate function (SUM, MIN, etc) needs to be listed in the
GROUP BY
clause.For example,
Good examples here: http://www.w3schools.com/sql/sql_groupby.asp