Sql server 2008 我在下面的查询中有一个问题
员工表: 期望输出1:这是每个名称的所有记录的总和和计数Sql server 2008 我在下面的查询中有一个问题,sql-server-2008,Sql Server 2008,员工表: 期望输出1:这是每个名称的所有记录的总和和计数 Name Count Salary A 3 9000 B 2 11000 C 1 4000 D 1 12000 Name Count Salary A 3 9000 B 1 11000 C 1 4000 D 0 12000 期望输出2:这是所有记录的总和,但每个名称仅活动记录的计数 Name Count Salary
Name Count Salary
A 3 9000
B 2 11000
C 1 4000
D 1 12000
Name Count Salary
A 3 9000
B 1 11000
C 1 4000
D 0 12000
期望输出2:这是所有记录的总和,但每个名称仅活动记录的计数
Name Count Salary
A 3 9000
B 2 11000
C 1 4000
D 1 12000
Name Count Salary
A 3 9000
B 1 11000
C 1 4000
D 0 12000
这里有一些一般性的建议,这些建议应该足以引导您找到解决方案,而无需实际为您做所有的工作 现在我想我应该假设您知道这一点,但是,您可能是一个完全的初学者,您可以从表中选择某些列,例如可以按任意顺序排列:
sql> select name, salary from employees
A 2000
B 2000
C 4000
A 4000
B 9000
A 3000
D 12000
您还可以使用where子句从数据中筛选某些行,例如,仅再次获取薪资为4000或更低的行,不保证订单:
sql> select name, salary from employees
...> where salary <= 4000
A 2000
B 2000
C 4000
A 4000
A 3000
这几乎就是你想要得到的结果所需要的,你只需要以稍微不同的方式应用这些知识:
您只需从表中选择姓名和薪资信息,您对显示日期或活动标志不感兴趣;
您需要按名称对行进行分组,并对组中的每一行进行计数;和
你感兴趣的是薪水的总和,而不是名字的最小值。
如果你意识到我没有加粗上面的那些词,因为我喜欢玩不同的字体属性,那就足够了:-
由于现在已经过了足够多的时间来确定这是否是类工作,请参阅以下架构设置和查询以提供所需内容:
create table empl (
id integer,
name varchar(20),
dt date,
actv integer,
sal integer);
insert into empl(id,name,dt,actv,sal) values (1,'A','4/01/2015',1, 2000);
insert into empl(id,name,dt,actv,sal) values (2,'B','4/01/2015',0, 2000);
insert into empl(id,name,dt,actv,sal) values (3,'C','5/03/2015',1, 4000);
insert into empl(id,name,dt,actv,sal) values (4,'A','5/05/2015',1, 4000);
insert into empl(id,name,dt,actv,sal) values (5,'B','5/16/2015',1, 9000);
insert into empl(id,name,dt,actv,sal) values (6,'A','5/02/2015',1, 3000);
insert into empl(id,name,dt,actv,sal) values (7,'D','8/03/2015',0,12000);
select name,
count(1) as count,
sum(sal) as salary
from empl
group by name
这将根据需要提供:
name count salary
---- ----- ------
A 3 9000
B 2 11000
C 1 4000
D 1 12000
这包括你的第一个案子。您的第二个案例有点棘手,因为您希望汇总每个姓名的所有工资,但只希望统计活动记录。这可以通过自连接子查询完成:
select e1.name,
(select count(1)
from empl e2
where e2.name = e1.name
and e2.actv = 1) as count,
sum(e1.sal) as salary
from empl e1
group by name
通过此稍加修改的查询,您可以得到:
name count salary
---- ----- ------
A 3 9000
B 1 11000
C 1 4000
D 0 12000
您没有问题,您希望我们完成您的工作。您是否至少尝试编写自己的SQL?如果是这样,请让我们知道您尝试了什么以及您遇到了哪些具体问题,而不是像@Time Schmelter建议的那样让我们编写代码。