Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 我在下面的查询中有一个问题_Sql Server 2008 - Fatal编程技术网

Sql server 2008 我在下面的查询中有一个问题

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

员工表:

期望输出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
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建议的那样让我们编写代码。