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中所有重复行的列之和显示表的不同行_Sql Server 2008_Sum_Distinct Values - Fatal编程技术网

Sql server 2008 使用SQL Server 2008中所有重复行的列之和显示表的不同行

Sql server 2008 使用SQL Server 2008中所有重复行的列之和显示表的不同行,sql-server-2008,sum,distinct-values,Sql Server 2008,Sum,Distinct Values,有两个表格: 任务表格: TaskName (PK) AllocationID(PK), TaskName(F.K to TaskName in 'Tasks' Table), UserID( F.K to ID in 'Users' Table), EngineerType( F.K to ID in 'EngineerType' Table), Start Date, End Date, Ho

有两个表格:

任务
表格:

    TaskName (PK)
     AllocationID(PK),
     TaskName(F.K to TaskName in 'Tasks' Table),
     UserID( F.K to ID in 'Users' Table),
     EngineerType( F.K to ID in 'EngineerType' Table),         
     Start Date,
     End Date, 
     Hours,
     Location
任务分配
表:

    TaskName (PK)
     AllocationID(PK),
     TaskName(F.K to TaskName in 'Tasks' Table),
     UserID( F.K to ID in 'Users' Table),
     EngineerType( F.K to ID in 'EngineerType' Table),         
     Start Date,
     End Date, 
     Hours,
     Location
“用户”表:

     ID,
     FirstName,
     LastName
     ID,
     Type
“工程师类型”表:

     ID,
     FirstName,
     LastName
     ID,
     Type
每个任务可以有多个分配。因此,任务名称可以在任务分配表中出现多次。同一任务可以映射到多个用户(UserID)

我需要显示所选任务(作为U.I的输入)、分配给该任务的用户ID、第一次出现的开始日期、第一次出现的结束日期以及所选任务的每个用户的总和(小时)

示例:
任务分配
数据:

     TaskName  UserID   TypeId StartDate EndDate Hours Location
      Task1    1          11    Feb 5     Feb 7   1     NULL
      Task1    1          11    Feb 6     Feb 7   2     NULL
      Task1    1          11    Feb 7     Feb 7   3     Onsite
      Task1    2          12    Feb 8     Feb 10  4     Offshore
      Task1    2          12    Feb 9     Feb 10  5     NULL
      Task1    2          12    Feb 10    Feb 10  6     NULL

     'EngineerTypes' data :
      ID   Type
      11   Type1
      12   Type2

     'Users' Data :
      ID     FirstName 
      1      Name1
      2      Name2
我实现的查询是:

                                                                                              Select TaskAllocation.UserId as UserId,Users.FirstName as Name,
                                                                    TaskAllocation.EngineerType as TypeId,EngineerTypes.Type as Type,
                                                       min(TaskAllocation.StartDate) as AllocationStartDate,
                                                                       max(TaskAllocation.EndDate) as AllocationEndDate,
                                                         sum(TaskAllocation.Hours) as Hours, TaskAllocation.Location
                                                                            from TaskAllocation join Users on TaskAllocation.UserId=Users.ID 
                                                                          join EngineerTypes on EngineerTypes.ID = TaskAllocation.EngineerType
                                                                         where TaskAllocation.TaskName = Task1' group by                               
     FirstName,UserId,EngineerType,Type,AllocationStartDate,AllocationEndDate,Hours,                                                                                      
                                                                                    Location,TaskName order by TaskName, UserId 
输出:用户ID名称类型ID类型分配开始日期分配结束日期小时位置

    1. 126   Name1  11   Type1  2015-11-23      2015-11-25         0.1  NULL
    2. 126   Name1  11   Type1  2015-11-24      2015-11-25         0.2  NULL
    3. 126   Name1  11   Type1  2015-11-25      2015-11-25         0.3  NULL
    4. 127   Name2  12   Type2  2015-11-23      2015-11-25         0.2  NULL
    5. 127   Name2  12   Type2  2015-11-24      2015-11-25         0.3  NULL
    6. 127   Name2  12   Type2  2015-11-25      2015-11-25         0.4  NULL

你可以试试下面的方法

方法1:

select taskname,
userid,
min(startdate) as'first occurence',
max(enddate) as'last occurence'
,sum(hours)
 from t1
 group by taskname,userid
方法2:交叉应用

 select 
 distinct taskname,userid,b.*
 from t1
 cross apply
 (select min(startdate) as Firstoccur,max(startdate) as secondocc,sum(hours) as hrs
 from t1 t2 where t1.taskname =t2.taskname and t1.userid=t2.userid
 group by t2.taskname,t2.userid) b
方法3: 窗口功能

 with cte
 as
 (
 select taskname,userid,
 min(startdate) over (partition by taskname,userid) as 'first',
 max(enddate) over (partition by taskname,userid) as 'second',
 sum(hours) over (partition by taskname,userid) as 'hrs',
 ROW_NUMBER() over (partition by taskname,userid order by taskname,userid) as rn
   from t1
   )
   select *from cte where rn=1

您好,我尝试了第一种方法,包括联接,但它显示的是重复的行。当您按照taskname、userid分组并根据示例数据应用聚合时,是否可以粘贴output。您不一定会得到重复的结果请查看所实现查询的问题。示例数据、输出应为like且输出不匹配Yes,虽然显示了示例数据输出,但是现在,我需要一些额外的数据与它一起显示。所以我使用了连接。使用联接后,输出不同。现在将在问题中包括其他表格。好的,请尝试设置问题的格式删除不必要的内容删除分配开始日期、结束日期、组中的小时是。移除了它们,它成功了。谢谢!