Sql server SQL Server如何在没有>&燃气轮机;导致从一次执行到另一次执行的总和发生变化
我有以下表格:Sql server SQL Server如何在没有>&燃气轮机;导致从一次执行到另一次执行的总和发生变化,sql-server,tsql,Sql Server,Tsql,我有以下表格: CREATE TABLE [Hours]( [Activity Month] [datetime], [Employee_ID] [nvarchar](10), [Activity Date] [datetime], [Hours] [float] ) CREATE TABLE [Employee_IDs]( [Month] [datetime], [Employee_ID_1] [nvarchar](10), [Emp
CREATE TABLE [Hours](
[Activity Month] [datetime],
[Employee_ID] [nvarchar](10),
[Activity Date] [datetime],
[Hours] [float]
)
CREATE TABLE [Employee_IDs](
[Month] [datetime],
[Employee_ID_1] [nvarchar](10),
[Employee_ID_2] [nvarchar](10),
[Employee_ID_3] [nvarchar](10),
[Status] [nvarchar](10)
)
其中,[Employee_ID]可以等于表[Employee_ID]中的一个或多个ID:
[Employee_ID_1]=[Employee_ID_2]=[Employee_ID_3]
[Employee_ID_1]<>[Employee_ID_2]<>[Employee_ID_3]
[Employee_ID_1]=[Employee_ID_2]<>[Employee_ID_3]
[Employee_ID_1]<>[Employee_ID_2]=[Employee_ID_3]
试图从表[Hours]
加入表[Employee\u ID]
在所有3个可能的ID上识别所有[Employee\u ID]
,而不重复导致不正确的总和([Hours])
如果我将以下内容用作解决方案查询,则不存在重复项:
SELECT [Employee_ID], [Activity Month], [Status] , SUM([Hours]) as Sum_Hours
FROM
(
SELECT [Employee_ID], [Activity Month], [Status], [Hours]
FROM [Hours] H1
INNER JOIN [Employee_IDs] E1 ON H1.[Employee_ID] = E1.Employee_ID_1
UNION
SELECT [Employee_ID], [Activity Month], [Status], [Hours]
FROM [Hours] H1
INNER JOIN [Employee_IDs] E2 ON H1.[Employee_ID] = E2.Employee_ID_2
UNION
SELECT [Employee_ID], [Activity Month], [Status], [Hours]
FROM [Hours] H1
INNER JOIN [Employee_IDs] E3 ON H1.[Employee_ID] = E2.Employee_ID_3
)T
WHERE T.[Activity Month]=@Month
GROUP BY [Employee_ID], [Activity Month], [Status]
但是如果我尝试选择
SELECT count(distinct [Employee_ID]) as HC, [Activity Month], [Status], SUM([Hours]) as Sum_Hours
FROM
(
SELECT [Employee_ID], [Activity Month], [Status], [Hours]
FROM [Hours] H1
INNER JOIN [Employee_IDs] E1 ON H1.[Employee_ID] = E1.Employee_ID_1
UNION
SELECT [Employee_ID], [Activity Month], [Status], [Hours]
FROM [Hours] H1
INNER JOIN [Employee_IDs] E2 ON H1.[Employee_ID] = E2.Employee_ID_2
UNION
SELECT [Employee_ID], [Activity Month], [Status], [Hours]
FROM [Hours] H1
INNER JOIN [Employee_IDs] E3 ON H1.[Employee_ID] = E2.Employee_ID_3
)T
WHERE T.[Activity Month]=@Month
GROUP BY [Activity Month], [Status]
然后,我面临着一个问题,即在数据表上不做任何更改的情况下,从一个执行到另一个执行的时间总和会有一些微小的变化
如果我将解决方案查询的结果插入表solution并运行:
SELECT count(distinct [Employee_ID]) as HC, [Activity Month], [Status], SUM([Hours]) as Sum_Hours FROM Solution Group By [Activity Month], [Status]
每次执行的总时数没有变化
您知道如何避免在解决方案查询中直接更改总和吗?除非我遗漏了什么,否则在中使用一个简单的
:
select
A.[Employee_ID], A.[Activity Month], B.[Status], Sum(A.[Hours])
from
Hours A
inner join Employee_IDs B on (A.Activity Month = @Month
and (A.Employee_ID = B.Employee_ID_1
or A.Employee_ID = B.Employee_ID_2
or A.Employee_ID = B.Employee_ID_3))
group by A.[Employee_ID], A.[Activity Month], B.[Status]
SELECT DISTINCT [Employee_ID], [Activity Month], [Status], Sum(H.[Hours])
FROM [Hours] H
INNER JOIN [Employee_IDs] E ON H.[Activity Month] = E.[Month]
AND H.[Employee_ID] IN([Employee_ID_1], [Employee_ID_2], [Employee_ID_3])
GROUP BY [Employee_ID], [Activity Month], [Status]
那么,所有3个员工ID字段是否都包含值?如果是,哪列是正确的,如果不是,那么COALESCE可能值得研究。Greate job posting DDL for sample tables,但是您的问题缺少DML for sample data以及期望的结果。此外,始终建议还包括产品版本标签(2008、2012等)它正在工作,但当Employee_ID_1=Employee_ID_2或Employee_ID_3或Employee_ID_1=Employee_ID_2=Employee_ID_3时,我们将有重复的结果。它正在工作,但当Employee_ID_1=Employee_ID_2或Employee_ID_2=Employee_ID_3或Employee_ID_1=Employee_ID_3或Employee_ID_1=Employee_3时,我们将有重复的结果将会有重复的结果。太好了!这解决了我的问题。
SELECT DISTINCT [Employee_ID], [Activity Month], [Status], Sum(H.[Hours])
FROM [Hours] H
INNER JOIN [Employee_IDs] E ON H.[Activity Month] = E.[Month]
AND H.[Employee_ID] IN([Employee_ID_1], [Employee_ID_2], [Employee_ID_3])
GROUP BY [Employee_ID], [Activity Month], [Status]